Skip to content

Instantly share code, notes, and snippets.

@trev-dev
Last active February 22, 2018 23:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save trev-dev/71c4307c9e34083dbe5b401b152f6252 to your computer and use it in GitHub Desktop.
Save trev-dev/71c4307c9e34083dbe5b401b152f6252 to your computer and use it in GitHub Desktop.
Node Mailer
const mailer = require('nodemailer');
const validator = require('validator');
class Email {
constructor() {
this.config = {
host: 'host',
port: 465,
secure: true,
auth: {
user: 'mailer@domain.com',
pass: 'pass'
}
};
this.message = {
to: 'info@domain.com',
from: this.config.auth.user
};
}
init() {
return new Promise((resolve, reject) => {
this.transporter = mailer.createTransport(this.config);
this.transporter.verify(function(err){
if (err) {
reject(err);
} else {
resolve();
}
});
});
}
validateInput(msg) {
return new Promise((resolve, reject)=>{
let errors = {found: false, fields: {}};
for (const key in msg) {
msg[key] = msg[key].trim();
if (key == 'email') {
if (!validator.isEmail(msg[key])) {
errors.found = true;
errors.fields[key] = 'Please enter a valid email address';
}
}
if (!msg[key]) {
errors.found = true;
errors.fields[key] = 'This field is required';
}
}
if (errors.found) {
reject(errors.fields);
} else {
resolve();
}
});
}
createMessage (msg) {
return new Promise((resolve, reject)=>{
this.validateInput(msg).then(()=>{
this.message.subject = `New website message from ${msg.firstname}`;
this.message.text =
`${msg.firstname} ${msg.lastname} sent you a message from domain.com\nContact Email: ${msg.email}\n\nMessage:\n\n${msg.message}`;
resolve();
}).catch((errors)=>{
reject(errors);
});
});
}
send (msg) {
return new Promise((resolve, reject)=>{
this.init().then(() => {
this.createMessage(msg).then(()=>{
this.transporter.sendMail(this.message, (err)=>{
if (err) {
reject(err);
} else {
resolve();
}
});
}).catch((err)=>{
reject(err);
});
}).catch((err) => {
reject(err);
});
});
}
}
module.exports = new Email();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment