I recently started programming my first node.js. I can't find any modules from node that is able to send html page as email. please help, thanks!
HTML doesn't offer an option to create a form that sends an email after submission. However, you can use the form action element to set a mailto: address (in this case, your own), triggering the submitter's mail client to open. This is a last-ditch option if you can't create a PHP-based form.
Set Nodemailer message optionsTo send a text formatted as HTML, no extra attributes are required, just put your HTML body into the message with an html attribute. For advanced templates, you can add attachments and embed images.
I have been using this module: https://github.com/andris9/Nodemailer
Updated example(using express and nodemailer) that includes getting index.jade template from the file system and sending it as an email:
var _jade = require('jade');
var fs = require('fs');
var nodemailer = require("nodemailer");
var FROM_ADDRESS = '[email protected]';
var TO_ADDRESS = '[email protected]';
// create reusable transport method (opens pool of SMTP connections)
var smtpTransport = nodemailer.createTransport("SMTP",{
service: "Gmail",
auth: {
user: "[email protected]",
pass: "PASSWORD"
}
});
var sendMail = function(toAddress, subject, content, next){
var mailOptions = {
from: "SENDERS NAME <" + FROM_ADDRESS + ">",
to: toAddress,
replyTo: fromAddress,
subject: subject,
html: content
};
smtpTransport.sendMail(mailOptions, next);
};
exports.index = function(req, res){
// res.render('index', { title: 'Express' });
// specify jade template to load
var template = process.cwd() + '/views/index.jade';
// get template from file system
fs.readFile(template, 'utf8', function(err, file){
if(err){
//handle errors
console.log('ERROR!');
return res.send('ERROR!');
}
else {
//compile jade template into function
var compiledTmpl = _jade.compile(file, {filename: template});
// set context to be used in template
var context = {title: 'Express'};
// get html back as a string with the context applied;
var html = compiledTmpl(context);
sendMail(TO_ADDRESS, 'test', html, function(err, response){
if(err){
console.log('ERROR!');
return res.send('ERROR');
}
res.send("Email sent!");
});
}
});
};
I'd probably move the mailer part to its own module but I included everything here so you can see it all together.
You can use nodemailer
and nodemailer-express-handlebars
modules do this:
var nodemailer = require('nodemailer');
var mailerhbs = require('nodemailer-express-handlebars');
var mailer = nodemailer.createTransport({
service: Gmail, // More at https://nodemailer.com/smtp/well-known/#supported-services
auth: {
user: [[email protected]], // Your email id
pass: [PASSWORD] // Your password
}
});
mailer.use('compile', mailerhbs({
viewPath: 'templates/default/emails', //Path to email template folder
extName: '.hbs' //extendtion of email template
}));
In router post you can use:
mailer.sendMail({
from: 'Your name [email protected]',
to: user.local.email,
subject: 'Reset your password',
template: 'password_reset', //Name email file template
context: { // pass variables to template
hostUrl: req.headers.host,
customeName: user.info.firstname + ' ' + user.info.lastname,
resetUrl: req.headers.host + '/users/recover/' + token,
resetCode: token
}
}, function (err, response) {
if (err) {
res.send('Error send email, please contact administrator to best support.');
}
res.send('Email send successed to you email' + req.body.email + '.');
done(err, 'done');
});
In hbs template you can use variables:
{{var from context}}
hope blocks of code to help you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With