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 install
for 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
-
form
value will be, from which email address sends the email (sender name) -
to
value will be, Receiver email address -
subject
email subject -
template
this will be .hbs template which will be create in ``views/email/``` folder -
context
will 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_callback
function 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 start
for yarnyarn start
- Hit the url at
postman
withget
request 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
.env
file:
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
gmailTransport
by 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
-
form
value will be, from which email address sends the email (sender name) -
to
value will be, Receiver email address -
subject
email subject -
template
this will be .hbs template which will be create in ``views/email/``` folder -
context
will 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 server -
smtpTransport.sendMail
is work likegmailTransport.sendMail
function
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 start
for yarnyarn start
- Hit the url at
postman
withget
request http://localhost:3000/email/smtp/template - the result will be: