Saim Khan
Saim Khan

Reputation: 21

how to include an HTML page in nodemailer in Node JS

I want to send Html Page using nodemailer in Email. But I can't include my html page. How can is this possible? Please help and give me a solution...

This is my EmailSendHtml.js File

 var nodemailer=require('nodemailer');
 var fs=require('fs');

 var d;

 fs.readFile('index.html','UTF-8',function(err,data)
 {
     d=data;
 });

 var transporter=nodemailer.createTransport(
 {
 service:'gmail',
 auth:
 {
  user:'[email protected]',
  pass:'********'
 }
 });

var a='<h1>Welcome</h1><p>That was easy!</p>';

 var mailOptions={
   from:'[email protected]',
   to:'[email protected]',
   subject:'Sending HTML page using Node JS',
   html:d
 };

 transporter.sendMail(mailOptions,function(error,info)
 {
    if(error)
    {
        console.log(error);
    }
    else
    {
        console.log('Email Sent: '+info.response);
    }
 });

That's my html page which I want to include and show in email.

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link type="text/css" rel="stylesheet" href="style.css"/>
    </head>
    <body>
        <h1>TODO write content</h1>
    </body>
</html>

This is my style.css file

/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
/* 
    Created on : Feb 19, 2018, 2:03:50 PM
    Author     : Lenovo
*/

h1
{
    color:red;
}

Upvotes: 0

Views: 5157

Answers (2)

Alpesh Patil
Alpesh Patil

Reputation: 1936

  • Use inline css in HTML and
  • Use file read stream as below
  • pass the file read stream to sendmail // { html }
  • Don't forget to explicitly close the file stream

Code sample

var htmlstream = fs.createReadStream("index.html");

transport.sendMail({ html: htmlstream }, function(err) {
    if (err) {
        // check if htmlstream is still open and close it to clean up
    }
});

Upvotes: 1

Nitin Bhapkar
Nitin Bhapkar

Reputation: 364

Just change your code as following :

var nodemailer=require('nodemailer');
var fs=require('fs');

require.extensions['.html'] = function (module, filename) {
    module.exports = fs.readFileSync(filename, 'utf8');
};

 var data = require('index.html'); // path to your HTML template

 var transporter=nodemailer.createTransport(
 {
 service:'gmail',
 auth:
 {
  user:'[email protected]',
  pass:'********'
 }
 });

var a='<h1>Welcome</h1><p>That was easy!</p>';

 var mailOptions={
   from:'[email protected]',
   to:'[email protected]',
   subject:'Sending HTML page using Node JS',
   html:data
 };

 transporter.sendMail(mailOptions,function(error,info)
 {
    if(error)
    {
        console.log(error);
    }
    else
    {
        console.log('Email Sent: '+info.response);
    }
 });

Upvotes: 0

Related Questions