Last active
February 22, 2018 23:42
-
-
Save trev-dev/71c4307c9e34083dbe5b401b152f6252 to your computer and use it in GitHub Desktop.
Node Mailer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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