Advertisement
Guest User

Untitled

a guest
May 14th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. import path from 'path';
  2. import nodemailer from 'nodemailer';
  3. import { htmlToText } from 'nodemailer-html-to-text';
  4. import templates from '../templates';
  5. import projectInfo from '../../project-info';
  6. import logger from '../../logger';
  7. const moduleLogger = logger.child({
  8. module: 'emailServiceActions'
  9. });
  10. const packageInfo = require('../../../package.json');
  11.  
  12. // Get service options
  13. const emailOptions = projectInfo['email'] || {};
  14. const emailService = process.env['EMAIL_SERVICE'] || emailOptions['service'];
  15. const emailHost = process.env['EMAIL_HOST'] || emailOptions['host'];
  16. const emailPort = process.env['EMAIL_HORT'] || emailOptions['port'];
  17. const emailUser = process.env['EMAIL_USER'] || emailOptions['user'];
  18. const emailPassword = process.env['EMAIL_PASS'] || emailOptions['pass'];
  19.  
  20. const transportOptions = {};
  21. if (emailService) {
  22. transportOptions.service = emailService;
  23. }
  24. if (emailHost) {
  25. transportOptions.host = emailHost;
  26. }
  27. if (emailPort) {
  28. transportOptions.port = emailPort;
  29. }
  30. if (emailUser) {
  31. transportOptions.auth = {
  32. user: emailUser,
  33. pass: emailPassword || ''
  34. };
  35. }
  36.  
  37. // Get e-mail configuration
  38. const emailSettings = projectInfo['email'];
  39. const config = {...emailSettings};
  40. if (process.env['EMAIL_FROM']) {
  41. config['from'] = process.env['EMAIL_FROM'];
  42. }
  43. config['recipients'] = config['recipients'] || {};
  44.  
  45. // Create nodemailer transporter
  46. const transporter = nodemailer.createTransport(transportOptions);
  47. transporter.use('compile', htmlToText());
  48.  
  49. export default {
  50. config,
  51. /**
  52. * @param {Object} params
  53. * @param {String} [params.to]
  54. * @param {String} [params.subject]
  55. * @param {String} [params.html]
  56. * @param {String} [params.text]
  57. */
  58. send: function (params) {
  59. const defaultConfig = this.config;
  60. const finalParams = {...defaultConfig, ...params};
  61. moduleLogger.trace('send', finalParams);
  62. transporter.sendMail(finalParams, (error, info) => {
  63. if (error) {
  64. return moduleLogger.error(error);
  65. }
  66. });
  67. },
  68. /**
  69. * @param {String} name of template file in email directory
  70. * @param {Object|String} params for send() or just subject
  71. * @param {Object} values to apply for the template
  72. */
  73. sendTemplate: function (name, params, values) {
  74. const templateName = path.join('email', name);
  75. const self = this;
  76. moduleLogger.trace('sendTemplate');
  77. templates.render(templateName, values, {
  78. cache: false
  79. }).then((html) => {
  80. moduleLogger.trace('sendTemplate: rendered to ', html);
  81. let finalParams;
  82. if (typeof params === 'string') {
  83. finalParams = {subject: params};
  84. } else {
  85. finalParams = params;
  86. }
  87. finalParams.html = html;
  88. self.send(finalParams);
  89. }).catch((err) => {
  90. moduleLogger.error('sendTemplate', { arguments, err });
  91. });
  92. }
  93. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement