Cedric Hadjian
Cedric Hadjian

Reputation: 914

How to send an e-mail using mailgun/mailchimp/etc in an express/node.js app

I want to send automated e-mails like order brief, sign-in e-mail, confirm e-mail, change password e-mail, etc to clients using mailchimp or mailgun or whatever e-mail delivery server because when I used nodemailer, the clients were receiving the e-mails in their spam inbox and sometimes not receiving at all.
Here's the code I used:

automated_emails.js file:

const nodemailer = require('nodemailer');
const ejs = require('ejs');

const user = 'xxx'
const pass = 'xxx';

const transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: { user, pass }
});

const emailPasswordChange = (email, uuid) => {
    ejs.renderFile("./mail/forgot-password.ejs", { uuid }, (err, data) => {

        if (err) return console.log(err)

        let mailOptions = {
            from: 'xxx',
            to: email,
            subject: "Forgot My Password",
            html: data
        };

        transporter.sendMail(mailOptions, (error, info) => {
            if (error) return console.log(error);
        });
    })
}

module.exports.emailPasswordChange = emailPasswordChange;

The EJS file is a file that contains the template, and I pass to it the user info like e-mail, name, etc.
They are a bunch of functions I call inside the main index.js file.
How do you suggest me to implement this? Is there a way I can put mailchimp/mailgun/etc's email delivery method inside my nodemailer app?

Upvotes: 2

Views: 6103

Answers (1)

Ezzat Elbadrawy
Ezzat Elbadrawy

Reputation: 142

To prevent moving your email to spam folder be sure that send email (from) is same as userEmail account which used by nodemailer.

I'm using gmail account to send emails using 'nodemailer' and it always success, and here is the code which I use:

const nodemailer = require('nodemailer');

var userEmail = '[email protected]';
var userPassword = 'yourPassword';

var transporter = nodemailer.createTransport(`smtps://${userEmail}:${userPassword}@smtp.gmail.com`);


// setup e-mail data with unicode symbols
var mailOptions = {
    from: userEmail,    // sender address
    to: '[email protected], [email protected]', // list of receivers
    subject: 'Demo-1', // Subject line
    text: 'Hello world from Node.js',       // plaintext body
    html: '<b>Hello world from Node.js</b>' // html body
};

// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info){
    if(error){
        return console.log(error);
    }
    console.log('Message sent: ' + info.response);
});

Upvotes: 2

Related Questions