天天看點

nodejs Egg架構使用nodemailer發送郵件子產品

作者:你的Maya

準備工作

因nodemailer是基于node服務的,是以需安裝node.js版本>=8以上。

Nodejs項目中下載下傳 nodemailer

npm i nodemailer           

郵箱配置流程:

我這裡拿QQ郵箱為例

1.開啟SMTP服務

位置: 郵箱設定 -> 帳戶 -> 往下滑,找到SMTP配置,如下圖

開啟服務:POP3/SMTP服務

開啟之後生成會一串的授權碼,我們把它先複制起來

接下來進入代碼子產品

// app/config/config.default.js

// qq郵箱配置
  config.qqEmail = {
    host: 'smtp.qq.com',		// QQ郵箱的SMTP位址
    port: 465,				 	// 郵箱的端口号一般都使用465,
    auth: {
      user: '[email protected]', // 你自己的郵箱的郵箱位址
      pass: 'lelsutwwbhg',     // 授權碼
    },
  };           
// app/extend/helper.js

/**
   * 發郵件
   * @param {Object} 
   */
  sendEmail(mailOptions) {
    const transporter = nodemailer.createTransport(this.app.config.qqEmail);
    transporter.sendMail(mailOptions, function(error, info) 
      	if (!err) {
             return {code:0, msg: "驗證碼發送成功" , info}
         } else {
             return {code:1, msg: "驗證碼發送失敗,請稍後重試" , error}
         }
    });
  },
  
/**
   *生成*位随機數 預設為6位
   * @param {number} length 
   */
  rand(length = 6) {
    let Num = '';
    for (let i = 0; i < length; i++) {
      Num += Math.floor(Math.random() * 10);
    }
    return Num;
  }           
// app/service/sendEmail.js


'use strict';

const Service = require('egg').Service;

class sendEmailService extends Service {

  async sendEmail(account) {
    const { app, ctx } = this;
    //要發送的收件人位址
    const account = '[email protected]'
    // 生成6位驗證碼
    const code = ctx.helper.rand(6); // 該輔助方法在extend/helper.js中定義
    // 定義模版
    const email = {
      title: '某某網---郵箱驗證碼',
      body: `
                <h1>尊敬的:${account}使用者</h1>
                <p style="font-size: 18px;color:#000;">
                您的驗證碼為:
                <span style="font-size: 20px;color:#f00;"> ${code}, </span>
                您目前正在某某網站新增賬號,驗證碼告知他人将會導緻資料資訊被盜,請勿洩露
                </p>
                <p style="font-size: 1.5rem;color:#999;">該驗證碼5分鐘内有效,請勿洩漏于他人!</p>
                `,
    };

    const emailCotent = {
      from: '[email protected]', // 發件人位址
      to: `${account}`, // 收件人位址,多個收件人可以使用逗号分隔
      subject: email.title, // 郵件标題
      html: email.body, // 郵件内容
    };

    return await ctx.helper.sendEmail(emailCotent);// 該輔助方法在extend/helper.js中定義
    

  }

module.exports = sendEmailService;           
// app/controller/sendEmail.js

'use strict';

const Controller = require('egg').Controller;
class sendController extends Controller {

  // 發送郵件
  async send() {
    const { ctx } = this;
    const result = await ctx.service.sendEmail();
    ctx.body={
	code:result.code,
	msg:result.msg
  }

}

module.exports = sendController;           
// app/router.js

'use strict';

module.exports = app => {
  const { router, controller } = app;

  //  發送郵件路由
  router.post('/api/send/email', controller.sendEmail.send);

};           

發送成功後的效果:

nodejs Egg架構使用nodemailer發送郵件子產品

繼續閱讀