Skip to content

Instantly share code, notes, and snippets.

@AidenMontgomery
Created September 15, 2011 17:02
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AidenMontgomery/1219811 to your computer and use it in GitHub Desktop.
Save AidenMontgomery/1219811 to your computer and use it in GitHub Desktop.
Send an email on Heroku with Node, ExpressJS, emailjs and SendGrid
#START:require
email = require 'emailjs'
#END:require
class SendGridMailer
#START:constructor
constructor: (app) ->
@settings = app.set 'smtpsettings'
#END:constructor
#START:sendEmail
sendEmail: (to, cc, bcc, subject, plainText, html, fn) ->
try
options =
host: @settings.host
port: @settings.port
ssl: false
user: @settings.username
password: @settings.password
headers =
to: to
cc: cc
bcc: bcc
text: plainText
subject: subject
from: @settings.supportEmail
reply_to: @settings.supportEmail
server = email.server.connect options
message = email.message.create headers
message.attach_alternative html
server.send message, (err, message) ->
fn err, message
catch error
fn error
#END:sendEmail
#START:exports
module.exports = SendGridMailer
#END:exports
#START:imports
express = require 'express'
mailer = require './sendgrid_mailer'
#END:imports
class Server
#START:constructor
constructor: (@port) ->
@app = express.createServer express.logger()
@configureApp()
@configureRoutes()
@emailer = new mailer @app
#END:constructor
#START:configureRoutes
configureRoutes: ->
@app.get '/', (request, response) ->
response.render 'index.jade', {layout: true }
@app.post '/', (request, response) =>
to = request.params.mail.to
cc = request.params.mail.cc
bcc = request.params.mail.bcc
subject = request.params.mail.subject
plainText = request.params.mail.plainText
html = request.params.mail.htmlText
@emailer.sendEmail to, cc, bcc, subject, plainText, html, (err, result) ->
console.log "error sending mail #{err}" if err?
response.render 'index.jade', {layout: true, locals: {errorMessage: err, flashMessage: 'You email was sent'}}
#END:configureRoutes
#START:configureApp
configureApp: ->
app.use express.logger()
app.use express.methodOverride()
app.use express.bodyParser()
smptSettings =
host: "smtp.sendgrid.net"
port: 25
password: process.env.SENDGRID_PASSWORD
username: process.env.SENDGRID_USERNAME
app.set 'smtpsettings', smptSettings
#END:configureApp
#START:start
start: ->
usedPort = @port
@app.listen @port, -> console.log("Listening on " + usedPort)
#END:start
#START:exports
module.exports = Server
#END:exports
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment