Merge pull request #221 from James9074/custom-email

Adding Custom SMTP Server Config
This commit is contained in:
David Baldwynn 2017-08-15 16:22:24 -07:00 committed by GitHub
commit b84ff46a31
9 changed files with 85 additions and 22 deletions

View file

@ -2,7 +2,7 @@ language: node_js
dist: trusty dist: trusty
sudo: false sudo: false
node_js: node_js:
- "6.11.1" - "6.11.2"
env: env:
- NODE_ENV=travis TRAVIS=travis CXX=g++-4.8 - NODE_ENV=travis TRAVIS=travis CXX=g++-4.8
services: services:

View file

@ -83,12 +83,23 @@ OR create your .env file
GOOGLE_ANALYTICS_ID=yourGAID GOOGLE_ANALYTICS_ID=yourGAID
PRERENDER_TOKEN=yourPrerender.ioToken PRERENDER_TOKEN=yourPrerender.ioToken
COVERALLS_REPO_TOKEN=yourCoveralls.ioToken COVERALLS_REPO_TOKEN=yourCoveralls.ioToken
MAILER_EMAIL_ID=SMTP_Injection
MAILER_FROM=noreply@yourdomain.com
MAILER_PASSWORD=your_sendgrid_apikey
MAILER_SERVICE_PROVIDER=SendGrid
BASE_URL=localhost BASE_URL=localhost
DSN_KEY=yourPrivateRavenKey DSN_KEY=yourPrivateRavenKey
# Mail config
MAILER_EMAIL_ID=user@domain.com
MAILER_PASSWORD=some-pass
MAILER_FROM=user@domain.com
# Use this for one of Nodemailer's pre-configured service providers
MAILER_SERVICE_PROVIDER=SendGrid
# Use these for a custom service provider
# Note: MAILER_SMTP_HOST will override MAILER_SERVICE_PROVIDER
MAILER_SMTP_HOST=smtp.domain.com
MAILER_SMTP_PORT=465
MAILER_SMTP_SECURE=true
``` ```
Side note: ___Currently we are using Raven and Sentry [https://www.getsentry.com](https://www.getsentry.com) for error logging. To use it you must provide a valid private DSN key in your .env file and a public DSN key in app/views/layout.index.html___ Side note: ___Currently we are using Raven and Sentry [https://www.getsentry.com](https://www.getsentry.com) for error logging. To use it you must provide a valid private DSN key in your .env file and a public DSN key in app/views/layout.index.html___
@ -174,7 +185,7 @@ $ bower install
``` ```
#### Prepare .env file: #### Prepare .env file:
Create .env file at project root folder. Fill in MAILER_SERVICE_PROVIDER, MAILER_EMAIL_ID and MAILER_PASSWORD. Create .env file at project root folder. Fill in MAILER_EMAIL_ID and MAILER_PASSWORD, and either MAILER_SERVICE_PROVIDER using a [Nodemailer Well-known service](https://nodemailer.com/smtp/well-known/) or MAILER_SMTP_HOST, MAILER_SMTP_PORT, and MAILER_SMTP_SECURE for a custom SMTP server.
``` ```
APP_NAME=forma APP_NAME=forma
APP_DESC= APP_DESC=
@ -183,10 +194,6 @@ NODE_ENV=development
BASE_URL=localhost:5000 BASE_URL=localhost:5000
PORT=5000 PORT=5000
username=forma_admin username=forma_admin
MAILER_SERVICE_PROVIDER=
MAILER_EMAIL_ID=
MAILER_PASSWORD=
MAILER_FROM=forma@data.gov.sg
SIGNUP_DISABLED=false SIGNUP_DISABLED=false
SUBDOMAINS_DISABLED=true SUBDOMAINS_DISABLED=true
DISABLE_CLUSTER_MODE=true DISABLE_CLUSTER_MODE=true
@ -194,6 +201,20 @@ GOOGLE_ANALYTICS_ID=
RAVEN_DSN= RAVEN_DSN=
PRERENDER_TOKEN= PRERENDER_TOKEN=
COVERALLS_REPO_TOKEN= COVERALLS_REPO_TOKEN=
# Mail config
MAILER_EMAIL_ID=forma@data.gov.sg
MAILER_PASSWORD=some-pass
MAILER_FROM=forma@data.gov.sg
# Use this for one of Nodemailer's pre-configured service providers
MAILER_SERVICE_PROVIDER=
# Use these for a custom service provider
# Note: MAILER_SMTP_HOST will override MAILER_SERVICE_PROVIDER
MAILER_SMTP_HOST=
MAILER_SMTP_PORT=465
MAILER_SMTP_SECURE=true
``` ```
**Note**: You can view the compatible types for MAILER_SERVICE_PROVIDER [here](https://nodemailer.com/smtp/well-known/) **Note**: You can view the compatible types for MAILER_SERVICE_PROVIDER [here](https://nodemailer.com/smtp/well-known/)

View file

@ -95,7 +95,6 @@ exports.resendVerificationEmail = function(req, res, next){
* Signup * Signup
*/ */
exports.signup = function(req, res) { exports.signup = function(req, res) {
// For security measures we remove the roles from the req.body object // For security measures we remove the roles from the req.body object
delete req.body.roles; delete req.body.roles;
@ -106,13 +105,13 @@ exports.signup = function(req, res) {
user.provider = 'local'; user.provider = 'local';
// Then save the temporary user // Then save the temporary user
nev.createTempUser(user, function (err, existingPersistentUser, newTempUser) { nev.createTempUser(user, function (err, existingPersistentUser, newTempUser) {
debugger; if (err) {
if (err) {
return res.status(400).send({ return res.status(400).send({
message: errorHandler.getErrorMessage(err) message: errorHandler.getErrorMessage(err)
}); });
} }
// new user created // new user created
if (newTempUser) { if (newTempUser) {
var URL = newTempUser[nev.options.URLFieldName]; var URL = newTempUser[nev.options.URLFieldName];

View file

@ -13,6 +13,17 @@ var mongoose = require('mongoose'),
querystring = require('querystring'), querystring = require('querystring'),
nodemailer = require('nodemailer'); nodemailer = require('nodemailer');
var smtpTransport = nodemailer.createTransport(config.mailer.options);
// verify connection configuration on startup
smtpTransport.verify(function(error, success) {
if (error) {
console.log('Your mail configuration is incorrect', error);
} else {
console.log('Mail server is ready to take our messages');
}
});
/** /**
* A Validation function for local strategy properties * A Validation function for local strategy properties
*/ */

View file

@ -43,7 +43,15 @@ module.exports = {
}, },
mailer: { mailer: {
from: process.env.MAILER_FROM || 'no-reply@tellform.com', from: process.env.MAILER_FROM || 'no-reply@tellform.com',
options: { options: process.env.MAILER_SMTP_HOST ? { //Uses custom SMTP if MAILER_SMTP_HOST is set
host: process.env.MAILER_SMTP_HOST || '',
port: process.env.MAILER_SMTP_PORT || 465,
secure: process.env.MAILER_SMTP_SECURE || true,
auth: {
user: process.env.MAILER_EMAIL_ID || '',
pass: process.env.MAILER_PASSWORD || ''
}
} : {
service: process.env.MAILER_SERVICE_PROVIDER || '', service: process.env.MAILER_SERVICE_PROVIDER || '',
auth: { auth: {
user: process.env.MAILER_EMAIL_ID || '', user: process.env.MAILER_EMAIL_ID || '',

View file

@ -59,11 +59,19 @@ module.exports = {
}, },
mailer: { mailer: {
from: process.env.MAILER_FROM || 'testing@'+process.env.SPARKPOST_SANDBOX_DOMAIN || 'no-reply@tellform.com', from: process.env.MAILER_FROM || 'testing@'+process.env.SPARKPOST_SANDBOX_DOMAIN || 'no-reply@tellform.com',
options: { options: process.env.MAILER_SMTP_HOST ? { //Uses custom SMTP if MAILER_SMTP_HOST is set
host: process.env.MAILER_SMTP_HOST || '',
port: process.env.MAILER_SMTP_PORT || 465,
secure: process.env.MAILER_SMTP_SECURE || true,
auth: {
user: process.env.MAILER_EMAIL_ID || '',
pass: process.env.MAILER_PASSWORD || ''
}
} : {
service: process.env.MAILER_SERVICE_PROVIDER || '', service: process.env.MAILER_SERVICE_PROVIDER || '',
auth: { auth: {
user: process.env.MAILER_EMAIL_ID || process.env.SPARKPOST_SMTP_USERNAME || '', user: process.env.MAILER_EMAIL_ID || '',
pass: process.env.MAILER_PASSWORD || process.env.SPARKPOST_SMTP_PASSWORD || '' pass: process.env.MAILER_PASSWORD || ''
} }
} }
} }

10
config/env/secure.js vendored
View file

@ -66,7 +66,15 @@ module.exports = {
}, },
mailer: { mailer: {
from: process.env.MAILER_FROM || '', from: process.env.MAILER_FROM || '',
options: { options: process.env.MAILER_SMTP_HOST ? { //Uses custom SMTP if MAILER_SMTP_HOST is set
host: process.env.MAILER_SMTP_HOST || '',
port: process.env.MAILER_SMTP_PORT || 587,
secure: process.env.MAILER_SMTP_SECURE || true,
auth: {
user: process.env.MAILER_EMAIL_ID || '',
pass: process.env.MAILER_PASSWORD || ''
}
} : {
service: process.env.MAILER_SERVICE_PROVIDER || '', service: process.env.MAILER_SERVICE_PROVIDER || '',
auth: { auth: {
user: process.env.MAILER_EMAIL_ID || '', user: process.env.MAILER_EMAIL_ID || '',

10
config/env/test.js vendored
View file

@ -52,7 +52,15 @@ module.exports = {
}, },
mailer: { mailer: {
from: process.env.MAILER_FROM || 'MAILER_FROM', from: process.env.MAILER_FROM || 'MAILER_FROM',
options: { options: process.env.MAILER_SMTP_HOST ? { //Uses custom SMTP if MAILER_SMTP_HOST is set
host: process.env.MAILER_SMTP_HOST || '',
port: process.env.MAILER_SMTP_PORT || 587,
secure: process.env.MAILER_SMTP_SECURE || true,
auth: {
user: process.env.MAILER_EMAIL_ID || '',
pass: process.env.MAILER_PASSWORD || ''
}
} : {
service: process.env.MAILER_SERVICE_PROVIDER || '', service: process.env.MAILER_SERVICE_PROVIDER || '',
auth: { auth: {
user: process.env.MAILER_EMAIL_ID || '', user: process.env.MAILER_EMAIL_ID || '',

View file

@ -13,8 +13,8 @@
"url": "https://github.com/whitef0x0/tellform.git" "url": "https://github.com/whitef0x0/tellform.git"
}, },
"engines": { "engines": {
"node": "6.11.1", "node": "6.11.2",
"npm": "3.3.6" "npm": "3.10.10"
}, },
"scripts": { "scripts": {
"addcontrib": "all-contributors add", "addcontrib": "all-contributors add",
@ -76,7 +76,7 @@
"mongoose-utilities": "~0.1.1", "mongoose-utilities": "~0.1.1",
"morgan": "~1.8.1", "morgan": "~1.8.1",
"multer": "^1.3.0", "multer": "^1.3.0",
"nodemailer": "~1.10.0", "nodemailer": "~4.0.0",
"nodemailer-sendgrid-transport": "^0.2.0", "nodemailer-sendgrid-transport": "^0.2.0",
"nodemailer-sparkpost-transport": "^1.0.0", "nodemailer-sparkpost-transport": "^1.0.0",
"passport": "~0.3.0", "passport": "~0.3.0",