express-email-project
express-email-project copied to clipboard
Project for How to send email by express js using GMAIL or shared hosting SMTP server.
Email sending to client is requirment for every morden project. Sending email from node js application with template is most common feature now a days.In this project, i have build functionality which will help the developer to configure the email sending functionality with template very easily. I have use the express js and nodemailer and my own custom mail configuration to sending the email through gmail smtp and shared hosting email smtp.
Prerequisites
- nodemailer
- nodemailer-express-handlebars
- dotenv
Installations
- Clone the Git repository git clone https://github.com/tariqulislam/express-email-project
- Run command: For npm
npm installfor yarnyarn install
Configure the smtp server or email Server
There is a .env file at root of the project, you just change the environment variable for email server
###For Gmail configuration
GMAIL_SERVICE_NAME = gmail # service name
GMAIL_SERVICE_HOST = smtp.gmail.com # service host name
GMAIL_SERVICE_SECURE = false # Service security
GMAIL_SERVICE_PORT = 587 # service port
GMAIL_USER_NAME = <email> # email address
GMAIL_USER_PASSWORD = <password> # email address password
Add html Template for email templating to views/email/test.hbs file:
<h1>You Node mailer is working</h1>
<p>
Your Name: {{name}}
<br/>
Your address: {{address}}
<br/>
Your Email: {{email}}
</p>
Send Email By with email template
For testing purpose, we will create get request for sending the email through Gmail smtp
Configure the gmail to less secure for sending email through gmail account
- Turn on the less secure app from this link https://myaccount.google.com/lesssecureapps
Then add the express-nodmailer-handlebars to routes/index.js and email.js file from config->email.js
routes/index.js
var MailConfig = require('../config/email');
var hbs = require('nodemailer-express-handlebars');
var gmailTransport = MailConfig.GmailTransport;
router.get('/email/template', (req, res, next) => {
MailConfig.ViewOption(gmailTransport,hbs);
let HelperOptions = {
from: '"Tariqul islam" <[email protected]>',
to: '[email protected]',
subject: 'Hellow world!',
template: 'test',
context: {
name:"tariqul_islam",
email: "[email protected]",
address: "52, Kadamtola Shubag dhaka"
}
};
gmailTransport.sendMail(HelperOptions, (error,info) => {
if(error) {
console.log(error);
res.json(error);
}
console.log("email is send");
console.log(info);
res.json(info)
});
});
After that add html template support to when sending the email we will call the MailConfig.viewOption() function at express router get request function at routes/index.js file.
let HelperOptions = {
from: '"Tariqul islam" <[email protected]>',
to: '[email protected]',
subject: 'Hellow world!',
template: 'test',
context: {
name:"tariqul_islam",
email: "[email protected]",
address: "52, Kadamtola Shubag dhaka"
}
};
HelperOptions object is simple configuration object for email templating
formvalue will be, from which email address sends the email (sender name)tovalue will be, Receiver email addresssubjectemail subjecttemplatethis will be .hbs template which will be create in ``views/email/``` foldercontextwill the arguments or paramter to send the dynamic value to template
gmailTransport.sendMail(HelperOptions, (error,info) => {
if(error) {
console.log(error);
res.json(error);
}
console.log("email is send");
console.log(info);
res.json(info)
});
gmailTransport.sendMail is the nodemailer default function to send email to sender address,
it takes two arguments:
- HelperOptions (simple template configuration object)
error_first_callbackfunction which contains (error, success) arguments
we will use postman to test the function for mail sending by gmail smtp
- From command line or cmd run command: for npm
npm run startfor yarnyarn start - Hit the url at
postmanwithgetrequest http://localhost:3000/email/template - the result will be:

Send email through the own SMTP server:
Send Email By and Create Template
For testing purpose, we will create get request for sending the email through own smtp server
For testing purpose i get the custom smtp information from my shared hosting site by cpanel:
- Go to Email account sections

- Select Email and you will be option
email client configuration
- Then get the shared hosting smtp account mail server information for account

- After that configure the smtp email to
.envfile:
For other smtp configuration
SMTP_SERVICE_HOST=<smtp host name>
SMTP_SERVICE_SECURE=<conection is secure or not>
SMTP_SERVICE_PORT=<smtp port>
SMTP_USER_NAME=<email Address>
SMTP_USER_PASSWORD=<password>
Sample code for sending email by own smtp
router.get('/email/smtp/template', (req, res, next) => {
MailConfig.ViewOption(smtpTransport,hbs);
let HelperOptions = {
from: '"Tariqul islam" <[email protected]>',
to: '[email protected]',
subject: 'Hellow world!',
template: 'test',
context: {
name:"tariqul_islam",
email: "[email protected]",
address: "52, Kadamtola Shubag dhaka"
}
};
smtpTransport.verify((error, success) => {
if(error) {
res.json({output: 'error', message: error})
res.end();
} else {
smtpTransport.sendMail(HelperOptions, (error,info) => {
if(error) {
res.json({output: 'error', message: error})
}
res.json({output: 'success', message: info});
res.end();
});
}
})
});
- Configure the email template like
gmailTransportby callingMailConfig.viewOption()methodMailConfig.ViewOption(smtpTransport,hbs); - Configure the email template Helper Option Object to sending the email through smtp email:
let HelperOptions = {
from: '"Tariqul islam" <[email protected]>',
to: '[email protected]',
subject: 'Hellow world!',
template: 'test',
context: {
name:"tariqul_islam",
email: "[email protected]",
address: "52, Kadamtola Shubag dhaka"
}
};
HelperOptions object is simple configuration object for email templating
formvalue will be, from which email address sends the email (sender name)tovalue will be, Receiver email addresssubjectemail subjecttemplatethis will be .hbs template which will be create in ``views/email/``` foldercontextwill the arguments or paramter to send the dynamic value to template
smtpTransport.verify((error, success) => {
if(error) {
res.json({output: 'error', message: error})
res.end();
} else {
smtpTransport.sendMail(HelperOptions, (error,info) => {
if(error) {
res.json({output: 'error', message: error})
}
res.json({output: 'success', message: info});
res.end();
});
}
})
smtpTransport.verify()method will check the smtp sever connection is valid and ping to server to all is okay for serversmtpTransport.sendMailis work likegmailTransport.sendMailfunction
we will use postman to test the function for mail sending by own smtp
- From command line or cmd run command: for npm
npm run startfor yarnyarn start - Hit the url at
postmanwithgetrequest http://localhost:3000/email/smtp/template - the result will be:
