email.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. 'use strict';
  2. const Controller = require('egg').Controller;
  3. const { CrudController } = require('naf-framework-mongoose-free/lib/controller');
  4. const assert = require('assert');
  5. const nodemailer = require('nodemailer');
  6. const path = require('path');
  7. const fs = require('fs');
  8. const _ = require('lodash');
  9. class EmailController extends Controller {
  10. constructor(ctx) {
  11. super(ctx);
  12. const { sender } = this.app.config;
  13. this.sender = sender;
  14. }
  15. /**
  16. * 发邮件
  17. * @param {String} config 发送人设置
  18. * @param {String} receiver 发送对象(邮箱)
  19. * @param {String} template 模板
  20. * @param {Object} params 模板参数
  21. */
  22. async sendEmail() {
  23. const { config, template, receiver, params } = this.ctx.request.body;
  24. assert(config, '缺少设置');
  25. assert(template, '缺少模板信息');
  26. assert(receiver, '缺少接收人信息');
  27. const sender = this.sender[config];
  28. const { mailContext, mailConfig } = this.getTemplate(template, sender, receiver, params);
  29. const transporter = nodemailer.createTransport(mailConfig);
  30. transporter.sendMail(mailContext, (error, info) => {
  31. if (error) console.log(error);
  32. else console.log(info);
  33. });
  34. this.ctx.ok({});
  35. }
  36. getTemplate(template, sender, receiver, params) {
  37. let p;
  38. if (_.isString(template)) p = path.resolve('template', `${template}.js`);
  39. if (_.isArray(template)) {
  40. const last = _.last(template);
  41. const fileName = `${last}.js`;
  42. template.pop();
  43. p = path.resolve('template', ...template, fileName);
  44. }
  45. const tl = require(p);
  46. const f = tl(sender, receiver, params);
  47. return f;
  48. }
  49. async error() {
  50. const { config, params } = this.ctx.request.body;
  51. try {
  52. const sender = this.sender[config];
  53. const receiver = this.app.config.devPerson;
  54. const { mailContext, mailConfig } = this.getTemplate('error', sender, receiver, params);
  55. const transporter = nodemailer.createTransport(mailConfig);
  56. transporter.sendMail(mailContext, (error, info) => {
  57. if (error) console.log(error);
  58. else console.log(info);
  59. });
  60. this.ctx.ok({});
  61. } catch (error) {
  62. console.log(this.ctx.request.body)
  63. }
  64. }
  65. }
  66. module.exports = CrudController(EmailController, {});