【實習】nodemailer:寄信

參考:

  1. W3C-Node.js Send an Email
  2. node.js使用nodemailer傳送郵件例項Script 
  3. Error: Invalid login: 535-5.7.8 Username and Password not accepted
一開始利用官網範例試做,卻無法登入信箱帳號。
  1. 下載:npm install nodemailer

  2. 匯入:var nodemailer = require('nodemailer');

  3. createTransport

    var transporter = nodemailer.createTransport({
      service: 'gmail',
      auth: {
        user: 'youremail@gmail.com',//信箱帳號
        pass: 'yourpassword'//信箱密碼
      }
    });

  4. mailOptions

    var mailOptions = {
      from: 'youremail@gmail.com',//寄信者
      to: 'myfriend@yahoo.com',//收信者
      subject: 'Sending Email using Node.js',//主旨
      text: 'That was easy!'//內容
    };

  5. 寄信

    transporter.sendMail(mailOptions, function(error, info){
      if (error) {
        console.log(error);
      } else {
        console.log('Email sent: ' + info.response);
      }
    });

爬文說需要更改gmail設定:gmail help
在信箱設定→查看所有設定→轉寄和POP/IMAP→開啟POP和IMAP→儲存變更。

後來查詢其他範例(參考2.),將createTransport內新增host: 'smtp.gmail.com'、port: 465、secureConnection: true。

var transporter = nodemailer.createTransport({
    service: 'gmail',
    host: 'smtp.gmail.com',
    secureConnection: true,
    port:465,
    auth: {
        user: 'sofavup4@gmail.com',
        pass: 'sofaVUP44'
    }
});

參考2本來是這樣:
var smtpTransport = nodemailer.createTransport("SMTP",{
  host: "smtp.qq.com", // 主機
  secureConnection: true, // 使用 SSL
  port: 465, // SMTP 埠
  auth: {
    user: "xxxxxxxx@qq.com", // 賬號
    pass: "xxxxxxxx" // 密碼
  }
});

多了"SMTP"會有錯:TypeError: Cannot create property 'mailer' on string 'SMTP'

於是就把"SMTP"刪掉,但又一樣登入不了。

後來利用錯誤訊息找到解決方法(參考3):
將信箱的【低安全性應用程式存取權】開啟就可以寄信了。

先以單獨的檔案執行:node email.js

結合之前的api:

router.post('/send', cors(), function(req, res. next){

//send email code here...

在transporter.sendMail中,把結果以res.status().send('...')回傳

});

用postman測試,網址:http://localhost:3000/send,body選json內容打入email,可成功寄信。

這個網誌中的熱門文章

【醫院資訊系統】筆記整理

【MIS】管理資訊系統Ch1+2

【Mongo】cmd命令