lrf před 2 roky
rodič
revize
047e25cdce
3 změnil soubory, kde provedl 53 přidání a 24 odebrání
  1. 17 20
      app/controller/email.js
  2. 10 2
      config/config.default.js
  3. 26 2
      template/bindEmail.js

+ 17 - 20
app/controller/email.js

@@ -5,43 +5,40 @@ const assert = require('assert');
 const nodemailer = require('nodemailer');
 const path = require('path');
 const fs = require('fs');
+const _ = require('lodash');
 
-// 发邮件
 class EmailController extends Controller {
   constructor(ctx) {
     super(ctx);
     const { sender } = this.app.config;
     this.sender = sender;
   }
+  /**
+   * 发邮件
+   * @param {String} config 发送人设置
+   * @param {String} receiver 发送对象(邮箱)
+   * @param {String} template 模板
+   * @param {Object} params 模板参数
+   */
   async sendEmail() {
-    const { template, receiver, params } = this.ctx.request.body;
+    const { config, template, receiver, params } = this.ctx.request.body;
+    assert(config, '缺少设置');
     assert(template, '缺少模板信息');
     assert(receiver, '缺少接收人信息');
-    const text = this.getTemplate(template, params);
-    const config = {
-      host: 'smtp.163.com',
-      port: 465,
-      secure: true,
-      auth: this.sender,
-    };
-    const mailOptions = {
-      from: `"天恩活泉" <${this.sender.user}>`, // 邮件来源
-      to: receiver, // 邮件发送到哪里,多个邮箱使用逗号隔开
-      subject: '天恩活泉-邮箱绑定', // 邮件主题
-      html: text, // html类型的邮件正文
-    };
-    const transporter = nodemailer.createTransport(config);
-    transporter.sendMail(mailOptions, (error, info) => {
+    const sender = this.sender[config];
+    const { mailContext, mailConfig } = this.getTemplate(template, sender, receiver, params);
+    const transporter = nodemailer.createTransport(mailConfig);
+    transporter.sendMail(mailContext, (error, info) => {
       if (error) console.log(error);
       else console.log(info);
     });
-    this.ctx.ok();
+    this.ctx.ok({});
   }
 
-  getTemplate(template, params) {
+  getTemplate(template, sender, receiver, params) {
     const p = path.resolve('template', `${template}.js`);
     const tl = require(p);
-    const f = tl(params);
+    const f = tl(sender, receiver, params);
     return f;
   }
 }

+ 10 - 2
config/config.default.js

@@ -51,8 +51,16 @@ module.exports = appInfo => {
   };
   // 邮件发送人
   config.sender = {
-    user: 'myhope1977@163.com', // 邮箱账号
-    pass: 'RZGYKLOQUTRCNLEO', // 邮箱stmp授权码
+    free: {
+      from: '福瑞科技',
+      user: 'myhope1977@163.com', // 邮箱账号
+      pass: 'RZGYKLOQUTRCNLEO', // 邮箱stmp授权码
+    },
+    tehq: {
+      from: '天恩活泉',
+      user: 'gzsdcsmfzyxgs@163.com',
+      pass: 'URWCTDJNYKVOBBRN',
+    },
   };
 
   // 路由设置

+ 26 - 2
template/bindEmail.js

@@ -1,7 +1,31 @@
 const _ = require('lodash');
+const assert = require('assert');
 const { BusinessError, ErrorCode } = require('naf-core').Error;
-module.exports = params => {
+/**
+ * 绑定邮箱模板
+ * @param {Object} sender 发送人设置
+ * @param {String} receiver 发送对象
+ * @param {Object} params 模板参数
+ * @prop {String} params.code 验证码
+ */
+module.exports = (sender, receiver, params) => {
+  assert(sender, '缺少发送人信息');
+  const { from, user, pass } = sender;
   const code = _.get(params, 'code');
   if (!code) throw new BusinessError(ErrorCode.DATA_INVALID, '缺少模板需要的参数');
-  return `【邮箱绑定】验证码为:${code},用于平台用户信息验证,若非本人操作,请忽略此信息。`;
+  const text = `【邮箱绑定】验证码为:${code},用于平台用户信息验证,若非本人操作,请忽略此信息。<${from}>`;
+  const auth = { user, pass };
+  const mailContext = {
+    from: `"${from}" <${user}>`, // 邮件来源
+    to: receiver, // 邮件发送到哪里,多个邮箱使用逗号隔开
+    subject: `${from}-邮箱绑定`, // 邮件主题
+    html: text, // html类型的邮件正文
+  };
+  const mailConfig = {
+    host: 'smtp.163.com',
+    port: 465,
+    secure: true,
+    auth,
+  };
+  return { mailContext, mailConfig };
 };