[TOC]
### egg.js 封装 nodeMailer 邮件发送类
文档:[https://nodemailer.com/about/](https://nodemailer.com/about/)
* [ ] 安装:npm install nodemailer --save
* [ ] 邮箱授权:
进入邮箱 》 设置 》 账户 》POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
开启POP3/SMYP服务,获取授权码
![](https://box.kancloud.cn/0d3cfa1f406928101ea7d3094ee017e7_801x189.png)
* [ ] 使用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类