How to send email with attachments in Node.js using Nodemailer
Tags: javascript, node, email, beginners
Published: 2020-09-29 03:31:45

---
title: How to send email with attachments in Node.js using Nodemailer
published: true
description: Learn how to send emails in Node.js using the Nodemailer module
tags: javascript, nodejs, email, beginner
cover_image: https://geekyturtles.com/assets/static/cover.872e63c.a2359baff849b8f684836f5a43dde302.png
---
Hello everyone ! 

In this tutorial, We are going to learn about how to send emails in Node.js using the Nodemailer module just simply with gmail.

### Prerequisites:
1. A Gmail account
2. Basic knowledge of JavaScript and NPM(Node package Manager)

## Install Nodemailer and Import it in source code:
To start with, create a working directory. Open command prompt and navigate to the directory and run the command `npm init -y`. A `package.json` file is generated inside the folder.

![nodemailer-npm-init.PNG](https://cdn.hashnode.com/res/hashnode/image/upload/v1601217857968/9-9zPQ9no.png)

Then Run the `npm install nodemailer -s` command to install the Nodemailer package.

> Nodemailer is a module in Node.js to send emails easily.

![nodemailer-install.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1601217801957/gI1JGyYpX.png)

After installing the Nodemailer, create a file `send-mail.js` inside the same working directory. Import the module inside the file.

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

``` 
### Configure Gmail account
Create a Nodemailer transporter object by providing the details of the email account.

```
let transporter = nodemailer.createTransport({
    service: 'gmail',
    auth:{
        user: 'xyz@gmail.com',
        pass: 'xxxxxxx'
    }
});
``` 
Set the service as **gmail** and provide your **email address and password** in 'auth object'.

Gmail provides a concept of **Less secure apps** using which we can use plain password to send emails. Turn on this setting in the link [https://www.google.com/settings/security/lesssecureapps](https://www.google.com/settings/security/lesssecureapps).
Instead of directly providing the password, we can also use OAuth2 by adding Oauth token details in the transporter object.

### Set the Email contents
Next create a mailContent object with necessary details for sending an email such as from address, to address, subject, mail body content and attachments.

```
let mailContent={
    from: 'Sender Name <xyz@gmail.com>',
    to: 'Receiver Name <receivername@gmail.com>',
    subject: 'First Node.js email',
    text: 'Hi,This is a test mail sent using Nodemailer',
    html: '<h1>You can send html formatted content using Nodemailer with attachments</h1>',
    attachments: [
        {
            filename: 'image1.jpg',
            path: __dirname + '/image1.jpg'
        }
    ]
};
```
The parameters provided inside the `mailContent` object are:
1. **from** - Provide the sender name and email address. This should be same as the user email configured in the transporter object above.
2. **to** - Provide the recipient name and email address
3. **subject** - Provide the email subject
4. **text** - Configure the plain text email content
5. **html** - If we want to send a proper html formatted mail, we can provide the html contents in this parameter.
6. **attachments** - In this parameter, We can include a list of attachments which needs to be sent along with the mail.

### Send Emails:
As we have completely configured the mail details, now we can send the mail using the `sendMail` method in the transporter object.

```
transporter.sendMail(mailContent, function(error, data){
    if(err){
        console.log('Unable to send mail');
    }else{
        console.log('Email send successfully');
    }
});
```
In the above code snippet, I have provided the mailContent paramter as input for the sendMail method.

We are done with the necessary coding part. Navigate to Command prompt and execute this file by running the command `node send-mail.js`.

Woohoo ! Mail is delivered in recipient's inbox.


![received-mail.PNG](https://cdn.hashnode.com/res/hashnode/image/upload/v1601220203153/W8YXR4bmp.png)


Happy Coding !!!