最近去学node就是想弄一个自己发送邮件的功能来玩玩,昨天学了node的hello world,所以今天终于要开始玩了。
发送邮件练习
1.创建sendMail.js存放发送方法
引入插件nodemailer,因为我想使用阿里云邮箱来发送,根据阿里云文档使用smtp所以也引入了nodemailer-smtp-transport.
const nodemailer = require('nodemailer');
const smtpTransport = require('nodemailer-smtp-transport');
let transporter = nodemailer.createTransport(smtpTransport({
host: 'smtp.qiye.aliyun.com',
port: 25,
auth: {
user: '邮箱账户',
pass: '邮箱密码',
}
}));
let sendMail = () => {
return new Promise((resolve, reject) => {
transporter.sendMail({
to: '接收人邮箱',
subject: '一封来自node的邮件',// 标题
html: '内容',
from: '发送人邮箱',// 一般是你的登录邮箱
}, (err, res) => {
if(err) {
reject(err);
} else {
resolve('发送成功');
}
})
})
}
module.exports = sendMail;
2.创建服务器文件app.js并发送邮件(参考上一篇文章):
app_aliyun.js引入sendMail.js执行发送方法。
const http = require('http');
const sendMail = require('sendMail');
http.createServer((req, res) => {
console.log('启动:127.0.0.1:8080');
res.writeHead(200,
{
'Content-Type':'text/html',
'Access-Control-Allow-Origin': '*', // 允许跨域访问
'Access-Control-Allow-Headers': '*', // 允许访问
}
);
let msg = '';
req.on('end', () => {
// 检查响应代码,检查正文是否为空,确保它是有效的JSON
if(res.statusCode === 200) {
// 发送邮件
sendMail(data).then((data) => {
res.end(JSON.stringify(data));
});
} else {
res.end('访问失败');
}
})
}).listen(8080);
console.log('启动');
3.终端上返回(邮件已成功发送到你的邮箱,请签收):
注意点(我掉过的坑):
访问外部接口时要把异步转为同步,我这里用的是Promise方法,主要用于解决res.end(data)中data的数据还没获取就已执行,则返回空数据。