EmailSender.coffee 1.7 KB

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