目標:「ClientID」「Client secret」「Refresh token」を得る
- Google Developers Console へ登録
- ホーム画面が出る
- とりあえずプロジェクトを作成する
- 名前は「My Project」のまま
- 左のメニューから「APIと認証」の下にある「認証情報」を選択
- 「OAuth 同意画面」タブを選択
- 「メールアドレス」は自分のアドレスのままにする
- 「サービス名」は「TEST APP」
- 下にある「保存」を押す
- ふたたび「認証情報」画面で「認証情報」タブを選択
- 「認証情報を追加」を押してメニューから「OAuth 2.0 クライアントID」を選択
- 「クライアントIDの作成」画面になる
- 「アプリケーションの種類」から「ウェブアプリケーション」を選択
- 「承認済みのリダイレクトURI」に「
https://developers.google.com/oauthplayground
」を入れる - 「作成」を押す
- 「OAuthクライアント」ダイアログが出るので「Client ID」と「Client secret」をメモし、「OK」を押して閉じる
- 「OAuth 同意画面」タブを選択
- ここまでのウィンドウはそのままにして、新しいウィンドウでhttps://developers.google.com/oauthplaygroundを開く
- 右上の歯車ボタンを押して「OAuth 2.0 configuration」を出し、以下のように設定
項目 | 値 |
---|---|
OAuth flow | Server-side |
OAuth endpoints | |
Access token location | Authorization header w/ Bearer prefix |
Access type | Offline |
Force approval prompt | [X](チェックをつける) |
Use your own OAuth credentials | [X](チェックをつける) |
OAuth Client ID | さきほど取得した Client ID |
OAuth Client secret | さきほど取得した Client secret |
- 「Step 1」の下部にある「Input your own scopes」に「
https://mail.google.com/
」を入力し「Authorize APIs」を押す- 「TEST APP が次の許可をリクエストしています」と出るので、「許可」を押す
- 「Step 2」に進んだら「Exchange authorization code for tokens」を押す
- ここで「Refresh token」をメモする
ここまでの手順で目標の「ClientID」「Client secret」「Refresh token」が得られた
この gist 内の server.js を配置して、以下の行を適宜書き換える
var gmail = {
user : "ユーザ名@gmail.com"
, clientId : "クライアントID"
, clientSecret : "クライアントシークレット"
, refreshToken : "リフレッシュトークン"
};
その後、以下を実行する
npm init -f
npm install nodemailer --save
npm install xoauth2 --save
npm start
成功すると、"ユーザ名@gmail.com"で指定したユーザーが自分自身に「Hello」というメールが送られる
Error: self signed certificate in certificate chain]
code: 'SELF_SIGNED_CERT_IN_CHAIN'
たぶんアンチウィルスかファイアウォール系でブロックされているので、一時的に解除するなりしてみる
[Error: unauthorized_client]
code: 'EAUTH'
単純に認証に失敗している。ユーザー名、クライアントID、クライアントシークレット、リフレッシュトークンの組が間違っていないか確認する
SMTP Error: 454 4.7.0
Too many login attempts, please try again later.
ログイン試行回数が多すぎる。1分に1回程度でも出るようなので、できるだけ間をあけて試したほうが良いかも
[Error: No recipients defined]
code: 'EENVELOPE'
メールを送信するのに必要な項目が欠けている。「to
」がundefined
になっていたりとか