mailer.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /**
  2. * mailer
  3. */
  4. module.exports = function(app) {
  5. 'use strict';
  6. var debug = require('debug')('crowi:lib:mailer')
  7. , nodemailer = require("nodemailer")
  8. , config = app.set('config')
  9. , mailConfig = {}
  10. , mailer = {}
  11. ;
  12. function createSMTPClient(option)
  13. {
  14. var client;
  15. debug('createSMTPClient option', option);
  16. if (!option) {
  17. option = {
  18. host: config.crowi['mail:smtpHost'],
  19. port: config.crowi['mail:smtpPort'],
  20. auth: {
  21. user: config.crowi['mail:smtpUser'],
  22. pass: config.crowi['mail:smtpPassword']
  23. }
  24. };
  25. if (option.port === 465) {
  26. option.secure = true;
  27. }
  28. }
  29. client = nodemailer.createTransport(option);
  30. debug('mailer setted up for SMTP', client);
  31. return client;
  32. }
  33. function createSESClient(option)
  34. {
  35. var client;
  36. if (!option) {
  37. option = {
  38. accessKeyId: config.crowi['aws:accessKeyId'],
  39. secretAccessKey: config.crowi['aws:secretAccessKey']
  40. };
  41. }
  42. var ses = require('nodemailer-ses-transport');
  43. var client = nodemailer.createTransport(ses(option));
  44. debug('mailer setted up for SES', client);
  45. return client;
  46. }
  47. function initialize() {
  48. if (!config.crowi['mail:from']) {
  49. mailer = undefined;
  50. return;
  51. }
  52. if (config.crowi['mail:smtpUser']
  53. && config.crowi['mail:smtpPassword']
  54. && config.crowi['mail:smtpHost']
  55. && config.crowi['mail:smtpPort']
  56. ) {
  57. // SMTP 設定がある場合はそれを優先
  58. mailer = createSMTPClient();
  59. } else if (config.crowi['aws:accessKeyId']
  60. && config.crowi['aws:secretAccessKey']) {
  61. // AWS 設定がある場合はSESを設定
  62. mailer = createSESClient();
  63. } else {
  64. mailer = undefined;
  65. }
  66. mailConfig.from = config.crowi['mail:from'];
  67. mailConfig.subject = config.crowi['app:title'] + 'からのメール';
  68. debug('mailer initialized');
  69. }
  70. function setupMailConfig (overrideConfig) {
  71. var c = overrideConfig
  72. , mc = {}
  73. ;
  74. mc = mailConfig;
  75. mc.to = c.to;
  76. mc.from = c.from || mailConfig.from;
  77. mc.text = c.text;
  78. mc.subject = c.subject || mailConfig.subject;
  79. return mc;
  80. }
  81. function send(config, callback) {
  82. if (mailer) {
  83. return mailer.sendMail(setupMailConfig(config), callback);
  84. } else {
  85. debug('Mailer is not completed to set up. Please set up SMTP or AWS setting.');
  86. return callback(new Error('Mailer is not completed to set up. Please set up SMTP or AWS setting.'), null);
  87. }
  88. }
  89. initialize();
  90. return {
  91. createSMTPClient: createSMTPClient,
  92. createSESClient: createSESClient,
  93. mailer: mailer,
  94. send: send,
  95. };
  96. };