Send mails using NodeJS

Abayomi Ogunnusi - Jul 2 '21 - - Dev Community

Hey, fams! today we are going to learn how to send e-mails, right from our IDE using NodeJS. The module of interest is called Nodemailer.

puppy

Prerequisites

πŸ”— NodeJs
πŸ”— Nodemailer
πŸ”— Email account


🎯 Steps
Open editor (VSCode 😁), initialize your project with the command below

npm init -y 
Enter fullscreen mode Exit fullscreen mode

This command initiates a package.json, package.json.lock, and index.js (main entry file). The index.js will house all our logic.

Dependencies

πŸ“ŒInstall Nodemailer

npm i nodemailer
Enter fullscreen mode Exit fullscreen mode

πŸ“Œ Import the package inside index.js

const nodemailer = require('nodemailer');
Enter fullscreen mode Exit fullscreen mode

πŸ‘¨πŸ½β€πŸ« For security reasons, make sure you install and use dot.env package to prevent your password from being exposed or pushed to GitHub.
Install dotenv

npm i dotenv -S
Enter fullscreen mode Exit fullscreen mode

ignor

Require dotenv in your index.js file. I didn't require it in this project because I am using dummy data.

require('dotenv').config();
Enter fullscreen mode Exit fullscreen mode

Then, create a .env file your email and password

Email= ***********@gmail.com
Password= ******
Enter fullscreen mode Exit fullscreen mode

env


Logic

🎯 Your auth logic in index.js with dotenv

// Gmail account info
const transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: process.env.EMAIL,
        pass: process.env.PASSWORD
    }
});
Enter fullscreen mode Exit fullscreen mode

🎯 Your auth logic in index.js without dotenv. Write the logic below and of course change the email to your own and the password to yours too.

// Gmail account info
const transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'dsimple@gmail.com',
        pass: 'ilovemymama'
    }
});
Enter fullscreen mode Exit fullscreen mode

🎯 Next use the mailOption to send your message.

// Email info
const mailOptions = {
    from: 'dsimple@gmail.com',
    to: 'fams@gmail.com',
    subject: 'How to send emails using NodeJS',
    text: 'Follow the instructions and you will be fine'
};
Enter fullscreen mode Exit fullscreen mode

🎯 Lastly, write:

// Send email πŸ“§  and retrieve server response
transporter.sendMail(mailOptions, function(error, info) {
    if (error) {
        console.log(error);
    } else {
        console.log('Email sent: ' + info.response);
    }
});
Enter fullscreen mode Exit fullscreen mode

When done properly, you should have the following logic in your index.js. That is if you choose not to use the dotenv
carbon (28)

To run: type πŸ‘‡πŸΌ in your terminal

node index
Enter fullscreen mode Exit fullscreen mode

Note: On your Gmail, do not forget to accept and allow the "Less secure apps" access to use your scripts with your Gmail SMTP connection. Gmail will alert you with an error if this option is off, you need to turn it on.
alert

Disable Less App Here

Multiple emails, CC and BCC

const mailOptions = {
    from: 'dsimple@gmail.com',
    to: 'fams@gmail.com,myrealfams@gmail.com',
    cc: 'lexus@gmail.com',
    bcc: 'sugar@gmail.com',
    subject: 'How to send emails using NodeJS',
    text: 'Follow the instructions and you will be fine'
};
Enter fullscreen mode Exit fullscreen mode

Send attachment

const mailOptions = {
    from: 'dsimple@gmail.com',
    to: 'fams@gmail.com,myrealfams@gmail.com',
    cc: 'lexus@gmail.com',
    bcc: 'sugar@gmail.com',
    subject: 'How to send emails using NodeJS',
    text: 'Follow the instructions and you will be fine',
    attachments: [{
    filename: "robocop.jpg", path: "./img/robocop.jpg"}]
};
Enter fullscreen mode Exit fullscreen mode

Thanks πŸ™ŒπŸ½ for reading
Read my Web Socket

GitHub logo drsimplegraffiti / drsimplegraffiti

Config files for my GitHub profile.

Calm Developer

Hi πŸ‘‹, I'm Abayomi.

A Software Engineer interested in Backend

Software Engineer

@drsimplegraffiti's Holopin board

drsimplegraffiti

drsimplegraffiti

drsimplegraffi1

  • πŸ”­ I’m currently working on All cheat sheets

  • 🌱 I’m currently learning Java and Spring

Connect with me:

drsimplegraffiti drsimplegraffi1 15661401 drsimplegraffiti @drsimplegraffiti

Languages and Tools:

aws bash docker express firebase git graphql heroku java javascript jenkins jest linux mocha mongodb mysql nestjs nginx nodejs postgresql postman rabbitMQ redis spring travisci typescript

drsimplegraffiti

Β drsimplegraffiti

drsimplegraffiti

Dev.to Post

πŸ”— Improve your Github Profile

πŸ”— Download Browser Page as PDF

πŸ”— Send mails using NodeJS

πŸ”— Chat App using Socket.io

πŸ”— Expose a local web server to the internet

πŸ”— Web scraping using Node Js

πŸ”— Bash Terminal Guide

πŸ”— Best Practices: Node JS Security

πŸ”— Postman Hacks

πŸ”— Time Zone: Nodejs

πŸ”— Conditional Rendering : REACT


Discuss

What other email πŸ“¬ services can you use apart from Gmail without toggling off the Less Secure App setting?

Reference

Download NodeJs
npm Reference
Nodemailer site

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .