EmailSender.coffee 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. logger = require('logger-sharelatex')
  2. metrics = require('../../infrastructure/Metrics')
  3. Settings = require('settings-sharelatex')
  4. nodemailer = require("nodemailer")
  5. sesTransport = require('nodemailer-ses-transport')
  6. sgTransport = require('nodemailer-sendgrid-transport')
  7. _ = require("underscore")
  8. if Settings.email? and Settings.email.fromAddress?
  9. defaultFromAddress = Settings.email.fromAddress
  10. else
  11. defaultFromAddress = ""
  12. # provide dummy mailer unless we have a better one configured.
  13. client =
  14. sendMail: (options, callback = (err,status) ->) ->
  15. logger.log options:options, "Would send email if enabled."
  16. callback()
  17. if Settings?.email?.parameters?.AWSAccessKeyID?
  18. logger.log "using aws ses for email"
  19. nm_client = nodemailer.createTransport(sesTransport(Settings.email.parameters))
  20. else if Settings?.email?.parameters?.sendgridApiKey?
  21. logger.log "using sendgrid for email"
  22. nm_client = nodemailer.createTransport(sgTransport({auth:{api_key:Settings?.email?.parameters?.sendgridApiKey}}))
  23. else if Settings?.email?.parameters?
  24. smtp = _.pick(Settings?.email?.parameters, "host", "port", "secure", "auth")
  25. logger.log "using smtp for email"
  26. nm_client = nodemailer.createTransport(smtp)
  27. else
  28. nm_client = client
  29. logger.warn "Email transport and/or parameters not defined. No emails will be sent."
  30. if nm_client?
  31. client = nm_client
  32. else
  33. logger.warn "Failed to create email transport. Please check your settings. No email will be sent."
  34. module.exports =
  35. sendEmail : (options, callback = (error) ->)->
  36. logger.log receiver:options.to, subject:options.subject, "sending email"
  37. metrics.inc "email"
  38. options =
  39. to: options.to
  40. from: defaultFromAddress
  41. subject: options.subject
  42. html: options.html
  43. replyTo: options.replyTo || Settings.email.replyToAddress
  44. socketTimeout: 30 * 1000
  45. client.sendMail options, (err, res)->
  46. if err?
  47. logger.err err:err, "error sending message"
  48. else
  49. logger.log "Message sent to #{options.to}"
  50. callback(err)