来源:Node.js

邮件服务

邮件服务的用途如下

  • 任务分配与跟踪:分配任务、指派工作和跟踪项目进展,比如发送任务清单、工作说明和进度更新,确保团队成员了解其责任和任务要求,并监控工作的完成情况
  • 错误报告和故障排除
    • 当程序出现错误或异常时,程序员可以通过邮件将错误报告发送给团队成员或相关方,帮助团队了解问题的性质、复现步骤和相关环境,从而更好地进行故障排除和修复
    • 邮件中还可以提供详细的错误消息、堆栈跟踪和其他相关信息,以便其他团队成员能够更好地理解问题并提供解决方案
  • 自动化构建和持续集成
    • 在持续集成和自动化构建过程中,邮件服务可以用于通知团队成员构建状态、单元测试结果和代码覆盖率等信息
    • 如果构建失败或出现警告,系统可以自动发送邮件通知相关人员,以便及时采取相应措施

使用

安装库

1
2
pnpm i js-yaml
pnpm i nodemailer

一般不会将邮件的密码/授权码明文写进代码,而是存放在环境变量或yaml文件里

mail.yaml:

1
2
pass: 自己弄授权码去
user: 某某某@某某.com

index.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import http from 'node:http'
import fs from 'node:fs'
import url from 'node:url'

import nodemailer from 'nodemailer'
import yaml from 'js-yaml'

// yaml文件转对象
const mailInfo = yaml.load(fs.readFileSync('./mail.yaml', 'utf8'))

// 初始化邮件服务
// QQ邮箱服务文档 https://wx.mail.qq.com/list/readtemplate?name=app_intro.html#/agreement/authorizationCode
const transport = nodemailer.createTransport({
service: 'qq', // 服务商,
host: 'smtp.qq.com', // 主机
port: 465, // 端口
secure: true, // 是否开启https
auth: {
user: mailInfo.user, // 邮箱账号
pass: mailInfo.pass // 密码/授权码
}
})

http.createServer(async (req, res) => {
const { pathname } = url.parse(req.url)
const { method } = req

if (method === 'POST' && pathname === '/send/mail') {

// 接收传来的数据
let data = ''
req.on('data', (chunk) => {
data += chunk
})

req.on('end', () => {
const { to, subject, text } = JSON.parse(data)
// 发送邮件
transport.sendMail({
to: to, // 接收者
from: mailInfo.user, // 发送者
subject: subject, // 标题
text: text, // 内容
})
res.end('ok')
})
}
}).listen(11451, () => console.log('Server running at http://localhost:11451'))

发送一个请求,就能收到了