準備工作
因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);
};
發送成功後的效果: