index.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /* eslint-disable global-require */
  2. import config from "config";
  3. import nodemailer from "nodemailer";
  4. import CoreClass from "../../core";
  5. let MailModule;
  6. class _MailModule extends CoreClass {
  7. // eslint-disable-next-line require-jsdoc
  8. constructor() {
  9. super("mail");
  10. MailModule = this;
  11. }
  12. /**
  13. * Initialises the mail module
  14. *
  15. * @returns {Promise} - returns promise (reject, resolve)
  16. */
  17. async initialize() {
  18. const importSchema = schemaName =>
  19. new Promise(resolve => {
  20. import(`./schemas/${schemaName}`).then(schema => resolve(schema.default));
  21. });
  22. this.schemas = {
  23. verifyEmail: await importSchema("verifyEmail"),
  24. resetPasswordRequest: await importSchema("resetPasswordRequest"),
  25. passwordRequest: await importSchema("passwordRequest"),
  26. dataRequest: await importSchema("dataRequest")
  27. };
  28. this.enabled = config.get("smtp.enabled");
  29. if (this.enabled)
  30. this.transporter = nodemailer.createTransport({
  31. host: config.get("smtp.host"),
  32. port: config.get("smtp.port"),
  33. secure: config.get("smtp.secure"),
  34. auth: {
  35. user: config.get("smtp.auth.user"),
  36. pass: config.get("smtp.auth.pass")
  37. }
  38. });
  39. return new Promise(resolve => {
  40. resolve();
  41. });
  42. }
  43. /**
  44. * Sends an email
  45. *
  46. * @param {object} payload - object that contains the payload
  47. * @param {object} payload.data - information such as to, from in order to send the email
  48. * @returns {Promise} - returns promise (reject, resolve)
  49. */
  50. SEND_MAIL(payload) {
  51. return new Promise((resolve, reject) => {
  52. if (MailModule.enabled) {
  53. MailModule.transporter
  54. .sendMail(payload.data)
  55. .then(info => {
  56. MailModule.log("SUCCESS", "MAIL_SEND", `Successfully sent email ${info.messageId}`);
  57. return resolve();
  58. })
  59. .catch(err => {
  60. MailModule.log("ERROR", "MAIL_SEND", `Failed to send email. ${err}`);
  61. return reject();
  62. });
  63. return;
  64. }
  65. resolve();
  66. });
  67. }
  68. /**
  69. * Returns an email schema
  70. *
  71. * @param {object} payload - object that contains the payload
  72. * @param {string} payload.schemaName - name of the schema to get
  73. * @returns {Promise} - returns promise (reject, resolve)
  74. */
  75. GET_SCHEMA(payload) {
  76. return new Promise(resolve => {
  77. resolve(MailModule.schemas[payload.schemaName]);
  78. });
  79. }
  80. }
  81. export default new _MailModule();