Shubham Chadokar
AuthorI am a Software Engineer who loves to write articles and tutorials on the latest technologies. I write majorly on Nodejs and Golang.
For enquiries call:
+1-469-442-0620
HomeBlogWeb DevelopmentNodemailer: How to Send Emails from a Node.js App?
In this tutorial, we will learn how to send emails in Node.js using the nodemailer npm package. For the email provider, we are going to use Sendinblue.
Start by creating a free account in Sendinblue.
A Sendinblue free account offers 300 mails/day. Its setup is easy and straightforward.
Nodemailer, an open source project started in 2010, is annpm module for Node.js applications to send emails. Today, nodemailer is a de facto to send an email in Node.js.
For this tutorial, I am using Nodejs v12.16.1 and VS Code as the Code Editor.
Create a new directory nodemailer-example.
Open the terminal or cmd inside the directory and run
$ npminit --yes
It will initialize a new npm package.
Following different npm packages, we are going to use in this project.
$ npm install --save nodemailer express cors body-parser dotenv
This command will install all the dependencies. Now, we can start the coding.
Open the nodemailer-example in the code editor and create the following folders and files in it; not to worry, I will be explaining all the files and commands involved.
nodemailer-example |- routes |- mail-api.js |- src |- send-mail.js |- template |- mail.html |- .env |- index.js
USER=YOUREMAILADDRESS PASS=xxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxx
By using .env file we are not exposing the credentials to the web.
Using environment variables in the project is an industrial standard.
"use strict"; require("dotenv").config(); constnodemailer = require("nodemailer"); /** * sendEmail * @param{Object}mailObj - Email information * @param{String}from- Email address of the sender * @param{Array}to- Array of recipients email address * @param{String}subject - Subject of the email * @param{String}text - Email body */ constsendEmail = async (mailObj) => { const{ from, to, subject, text } = mailObj; try { // Create a transporter lettransporter = nodemailer.createTransport({ host:"smtp-relay.sendinblue.com", port:587, auth: { user:process.env.USER, pass:process.env.PASS, }, }); // send mail with defined transport object letinfo = awaittransporter.sendMail({ from:from, // sender address to:to, // list of receivers subject:subject, // subject line text:text, // plain text body }); console.log(`Message sent: ${info.messageId}`); return`Message sent: ${info.messageId}`; } catch (error) { console.error(error); thrownewError( `Something went wrong in the sendmail method. Error: ${error.message}` ); } }; module.exports = sendEmail;
In the beginning, we are importing dotenv to get the environment variables from the .env file and nodemailer to send the email.
The sendEmailfunction accepts an object. This object has from, to, subject, text fields.
Please note that, from and USER must be same.
The nodemailer.createTransportreturns a mail object. The transporter variable is storing the mail object.
let transporter = nodemailer.createTransport({ host: "smtp-relay.sendinblue.com", port: 587, auth: { user: process.env.USER, pass: process.env.PASS, }, });
Open SMTP tab in your sendinmail account and cross check the host and port.
In the auth object, we are passing the user and password from the environment variable.
Send the mail using sendMail method.
// send mail with defined transport object let info = await transporter.sendMail({ from: from, // sender address to: to, // list of receivers subject: subject, // Subject line text: text, // plain text body });
It returns a Promise of Send Message Info.
In the end, it is returning the message id.
The sendEmail method is ready.
Let’s create an express route for it. This is the API endpoint using which we can access the sendEmail function.
Open the mail-api.js in the code editor and paste the below code.
constexpress = require("express"); constrouter = express.Router(); constsendMailMethod = require("../src/send-mail"); // Post request to send an email router.post("/sendmail", async (req, res) => { try { constresult = awaitsendMailMethod(req.body); // send the response res.json({ status:true, payload:result }); } catch (error) { console.error(error.message); res.json({ status:false, payload:"Something went wrong in Sendmail Route." }) } }) module.exports = router;
The express framework provides a Router method to create different HTTP methods. Here, we have created a POST method to send the mail.
Instead of extracting the req.body parameters, we passed it as it is. The benefit of this approach is that if there is a change in argument or position, then we would not have to change it in all the places.
In the end, we are exporting the router. Now, this can be used in the server side.
Now, it’s time to create a server and expose the routes on it.
Open the index.js and paste the below code in it.
"use strict"; constexpress = require("express"); constbodyParser = require("body-parser"); constcors = require("cors"); constapp = express(); constmailAPI = require("./routes/mail-api.js"); // Express body parser app.use(cors()); app.use(bodyParser.json()); app.use( bodyParser.urlencoded({ limit:"50mb", extended:false, parameterLimit:50000 }) ); // use the routes specified in route folder app.use("/api/v1", mailAPI); constport = process.env.PORT || 4444; //listen to the server app.listen(port, function () { console.log(`listening to the port ${port} .....`); });
The route is available on /api/v1/sendmail.
Run the server.
$ node index.js listening to the port 4444 .....
There are couple of methods to test the API.
Using the Postmanor using the Curl command.
Install Postman on your machine if it is not installed.
Create a POST request.
Request Body:
{ "from": "hello@schadokar.dev", "to": ["shubham@schadokar.dev"], "subject": "Mail from Nodemailer", "text": "Sending an email using nodemailer package." }
Hit Send. Make sure the server is running.
On Success, the response returns the message id. Now, check your mailbox.
If you are unable to find the mail in your Inbox, check the promotional mail folder.
Looking to master Python? Join our unique Python course and unlock endless possibilities! Learn Python in a short duration with our comprehensive syllabus. Don't miss out, enroll now!
Open the terminal or cmd.
In the below curl command, change the parameters and enter.
curl -X POST http://localhost:4444/api/v1/sendmail -H "Content-Type:application/json" -d '{"from": "hello@schadokar.dev","to": ["shubham@schadokar.dev"],"subject": "Mail from Nodemailer", "text": "Sending an email using nodemailer package."}'
In this example, we have sent a simple text message to the recipient.
Nodemailer also gives you an option to send the message in HTML format.
Open the mail.html in the code editor and paste the below code.
<div style="text-align: center;""> <h1 style="color: #3584c8;">Nodemailer Example</h1> <p>This is an example html template to demonstrate the sending email using html. <br />
In this tutorial, we have seen how to send email in Node.js using the nodemailer npm package. Hope it has been helpful. Be sure to check out the rest of the tutorials on KnowledgeHut’s website and don't forget to practice with your code!
Name | Date | Fee | Know more |
---|