EmailSender.coffee 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. logger = require('logger-sharelatex')
  2. metrics = require('../../infrastructure/Metrics')
  3. Settings = require('settings-sharelatex')
  4. metrics = require("../../infrastructure/Metrics")
  5. nodemailer = require("nodemailer")
  6. sesTransport = require('nodemailer-ses-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?
  21. smtp = _.pick(Settings?.email?.parameters, "host", "port", "secure", "auth")
  22. logger.log "using smtp for email"
  23. console.log smtp
  24. nm_client = nodemailer.createTransport(smtp)
  25. else
  26. nm_client = client
  27. logger.warn "Email transport and/or parameters not defined. No emails will be sent."
  28. if nm_client?
  29. client = nm_client
  30. else
  31. logger.warn "Failed to create email transport. Please check your settings. No email will be sent."
  32. module.exports =
  33. sendEmail : (options, callback = (error) ->)->
  34. logger.log receiver:options.to, subject:options.subject, "sending email"
  35. metrics.inc "email"
  36. options =
  37. to: options.to
  38. from: defaultFromAddress
  39. subject: options.subject
  40. html: options.html
  41. replyTo: options.replyTo || Settings.email.replyToAddress
  42. socketTimeout: 30 * 1000
  43. client.sendMail options, (err, res)->
  44. if err?
  45. logger.err err:err, "error sending message"
  46. else
  47. logger.log "Message sent to #{options.to}"
  48. callback(err)