多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[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; ```