email.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. const p = path.resolve('template', `${template}.js`);
  38. const tl = require(p);
  39. const f = tl(sender, receiver, params);
  40. return f;
  41. }
  42. }
  43. module.exports = CrudController(EmailController, {});