Node---發送郵件練習

最近去學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('啓動');
複製代碼

3.終端上返回(郵件已成功發送到你的郵箱,請簽收):


注意點(我掉過的坑):

訪問外部接口時要把異步轉爲同步,我這裏用的是Promise方法,主要用於解決res.end(data)中data的數據還沒獲取就已執行,則返回空數據。服務器

相關文章
相關標籤/搜索