2016-08-10

JS: 如何使用 gmail oauth2 寄送 email ?

如何使用 gmail xoauth2 寄送 email ?

結論:

安裝:
> npm install --save nodemail xoauth2
設定:
  • 請先登入要使用帳號的 google 控制台
  • 建立或選擇一個專案
  • 啟用 Gmail API, LeftTab p[資料庫] -> p[Gmail API] -> TopMeun p[啟用API]
  • 新增憑證 -> [OAuth 用戶端 ID], o[網路應用程式], i[已授權的重新導向 URI]="https://developers.google.com/oauthplayground". 紀錄產生的
    • 用戶端 ID
    • 用戶端密碼
  • OAuth 2.0 Playground
  • 設定 OAuth 2.0 configuration(右上的齒輪圖示)
  • p[Step 1.] Select & authorize APIs
  • p[Step 2.] Exchange authorization code for tokens
    • p[Exchange authorization code for tokens]
    • 紀錄產生的 Refresh token
程式: sendMail.js
var nodemailer = require('nodemailer');
var xoauth2 = require('xoauth2');
//將剛剛產生的 用戶端 ID, 用戶端密碼, Refresh token 填入
var xoauth2gen = xoauth2.createXOAuth2Generator({
    user: "{$使用帳號的email}",
    clientId: "{$用戶端 ID}",
    clientSecret: "{$用戶端密碼}",
    refreshToken: "{$Refresh token}"
});

var transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: { xoauth2: xoauth2gen }
});

// 寄信
transporter.sendMail({
    "from": "{$使用帳號的email}",
    "to": "{$寄送的email}",
    "subject": "{$主旨}",
    "text": "{$文字內容}"
}, function(err) {
    !err && console.log("send fin");
});

廢話:

常常能聽到需求是越安全越好, 殊不知安全是需要代價的.
Gmail 為了改善原本 POP3/SMTP 協定的安全問題, 一直做了很多工作, 但也讓程式設計師增加了工作量. 這次整個導入 oauth2 機制, 讓原本簡單的工作變複雜了.

正文:

為避免浪費時間, 在還沒往下看之前, 如果你不想改變任何程式, 請調低安全設定. that’s all.
有許多套件能幫助你作寄信這件事, 所以別自己寫. 以下是以 nodemail 作為介紹.
在 oauth2 的支援上, nodemail 使用 xoauth2. 但不知道是 Gmail API 本身不支援還是 nodemail 不支援, 我沒辦法使用 JWT, 只能使用WebServer 的方式. 而這個方法需要先建立 OAuth 2.0 Client ID 的授權. 因為沒有自己的"授權URI", 所以必須借用OAuth 2.0 Playground來產生 “Refresh Token”. 其他詳參[結論].

沒有留言:

張貼留言