EmailHandler.mjs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { callbackify } from 'node:util'
  2. import Settings from '@overleaf/settings'
  3. import logger from '@overleaf/logger'
  4. import EmailBuilder from './EmailBuilder.mjs'
  5. import EmailSender from './EmailSender.mjs'
  6. import Queues from '../../infrastructure/Queues.mjs'
  7. const EMAIL_SETTINGS = Settings.email || {}
  8. /**
  9. * @param {string} emailType
  10. * @param {opts} any
  11. */
  12. async function sendEmail(emailType, opts) {
  13. const email = EmailBuilder.buildEmail(emailType, opts)
  14. if (email.type === 'lifecycle' && !EMAIL_SETTINGS.lifecycle) {
  15. return
  16. }
  17. opts.html = email.html
  18. opts.text = email.text
  19. opts.subject = email.subject
  20. await EmailSender.promises.sendEmail(opts, emailType)
  21. }
  22. function sendDeferredEmail(emailType, opts, delay) {
  23. Queues.createScheduledJob(
  24. 'deferred-emails',
  25. { data: { emailType, opts } },
  26. delay
  27. ).catch(err => {
  28. logger.warn({ err, emailType, opts }, 'failed to queue deferred email')
  29. })
  30. }
  31. export default {
  32. sendEmail: callbackify(sendEmail),
  33. sendDeferredEmail,
  34. promises: {
  35. sendEmail,
  36. },
  37. }