最近去学node就是想弄一个本身发送邮件的功能来玩玩,昨天学了node的hello world,因此今天终于要开始玩了。javascript
1.建立sendMail.js存放发送方法html
引入插件nodemailer,由于我想使用阿里云邮箱来发送,根据阿里云文档使用smtp因此也引入了nodemailer-smtp-transport. java
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并发送邮件(参考上一篇文章):node
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('启动');
复制代码
访问外部接口时要把异步转为同步,我这里用的是Promise方法,主要用于解决res.end(data)中data的数据还没获取就已执行,则返回空数据。服务器