最近去學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的數據還沒獲取就已執行,則返回空數據。服務器