nodeMailer

优质
小牛编辑
138浏览
2023-12-01

egg.js 封装 nodeMailer 邮件发送类

文档: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&quot;&gt;&lt;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 = '&lt;h2&gt;测试一下::&lt;/h2&gt;&lt;a class=&quot;elem-a&quot; href=&quot;https://baidu.com&quot;&gt;&lt;span class=&quot;content-elem-span&quot;&gt;测试链接&lt;/span&gt;&lt;/a&gt;';

const has_send = await this.service.tool.sendMail(email, subject, html);

if (has_send) {
    ctx.body={
        message: '发送成功',
    };
    return;
}
ctx.body={
    message: '发送失败',
};

}

}

module.exports = TestController;