[TOC]
### egg.js 封裝 nodeMailer 郵件發送類
文檔:[https://nodemailer.com/about/](https://nodemailer.com/about/)
* [ ] 安裝:npm install nodemailer --save
* [ ] 郵箱授權:
進入郵箱 》 設置 》 賬戶 》POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務
開啟POP3/SMYP服務,獲取授權碼

* [ ] 使用nodemailer
```
// 這里舉簡單例子,也可以封裝成service來調用
// 引入nodemailer
const nodemailer = require('nodemailer');
// 封裝發送者信息
const transporter = nodemailer.createTransport({
service: 'qq', // 調用qq服務器
secureConnection: true, // 啟動SSL
port: 465, // 端口就是465
auth: {
user: 'xxxxx@qq.com', // 賬號
pass: 'xxxxxxxxxx', // 授權碼,
},
});
// 郵件參數及內容
const mailOptions = {
from: 'xxxxx@qq.com', // 發送者,與上面的user一致
to: 'xxxx@xxx.com', // 接收者,可以同時發送多個,以逗號隔開
subject: '測試的郵件', // 標題
// text: '測試內容', // 文本
html: '<h2>測試一下:</h2><a class="elem-a" href="https://baidu.com"><span class="content-elem-span">測試鏈接</span></a>',
};
// 調用函數,發送郵件
await transporter.sendMail(mailOptions, function(err, info) {
if (err) {
console.log(err);
return;
}
console.log(info);
});
```
*****
* [ ] 簡單封裝
上面是直接使用nodemailer,在實際開發中,我們可以對其進行簡單封裝,以便調用
在app/service/tool.js文件
```
// app/service/tool.js
'use strict';
const Service = require('egg').Service;
const nodemailer = require('nodemailer');
const user_email = 'example@qq.com';
const auth_code = 'xxxxxx';
const transporter = nodemailer.createTransport({
service: 'qq',
secureConnection: true,
port: 465,
auth: {
user: user_email, // 賬號
pass: auth_code, // 授權碼
},
});
class ToolService extends Service {
async sendMail(email, subject, text, html) {
const mailOptions = {
from: user_email, // 發送者,與上面的user一致
to: email, // 接收者,可以同時發送多個,以逗號隔開
subject, // 標題
text, // 文本
html,
};
try {
await transporter.sendMail(mailOptions);
return true;
} catch (err) {
return false;
}
}
}
module.exports = ToolService;
```
* [ ] 在測試controller中調用, app/controller/test.js
```
// app/controller/test.js
'use strict';
const Controller = require('egg').Controller;
class TestController extends Controller {
async testSendMail() {
const ctx = this.ctx;
const email = 'xxxxxx@163.com'; // 接收者的郵箱
const subject = '測試郵件';
const text = '這是一封測試郵件';
const html = '<h2>測試一下::</h2><a class="elem-a" href="https://baidu.com"><span class="content-elem-span">測試鏈接</span></a>';
const has_send = await this.service.tool.sendMail(email, subject, html);
if (has_send) {
ctx.body={
message: '發送成功',
};
return;
}
ctx.body={
message: '發送失敗',
};
}
}
module.exports = TestController;
```
- 概述
- 起步
- 跨域配置
- 路徑別名
- 路由
- api版本控制
- 錯誤和異常
- 全局異常處理
- 數據庫
- 創建遷移文件
- sequelize數據類型
- 配置
- 新增
- 查詢
- 條件查詢
- 模糊查詢
- 排序查詢
- 聚合查詢
- 分組查詢
- 分頁查詢
- 修改
- 刪除
- 獲取器
- 修改器
- 靜態屬性
- 字段驗證
- 外鍵約束
- 關聯模型
- 一對一
- 一對多
- 左外連接
- 多對多
- 字段顯示隱藏
- 事務
- 字段自增
- 驗證層
- egg-validate
- indicative驗證器
- egg-validate-plus
- betterValidate
- 校驗規則
- 中間件
- 安全
- 數據加密
- 單向加密
- 示例代碼
- 封裝egg加密
- 上傳
- path模塊
- 單文件上傳
- 多文件上傳
- 按照日期存儲
- 工具函數
- egg常用工具函數
- 緩存
- 配置緩存插件
- 設置緩存
- 獲取緩存
- 刪除緩存
- 消息隊列
- rabbitMQ
- 安裝
- 簡單隊列
- 工作隊列
- 工作隊列(dispach分發)
- 消息應答和持久化
- redis
- 數據類型
- 字符串類型(String)
- 哈希類型(Hash)
- 列表(List)
- 無序集合(Set)
- 可排序集合(Zset)
- 郵件系統
- nodeMailer
- 第三方模塊
- 生成隨機數
- JWT
- JWT鑒權
- 生成Token
- 短信服務
- 阿里大魚短信驗證碼
- 發送短信邏輯
- 阿里短信Node類