15
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node.jsでGmailからメールをOAuth認証で送信する方法

Last updated at Posted at 2018-04-24

LINE BOT(Node.jsで実装)で手軽に会社に勤怠連絡メールを送りたくて、OAuth認証でGmailからメールを送ろうと思いました。パスワード認証だと2段階認証にしてるとダメらしくて、これのために2段階認証を解除するのもナンセンスだと思ったので、nodemailer(Node.jsのメール送信のためのモジュール)を使ってOAuth認証でメールを送ろうと思ったのですが、ハマった点があったので共有です。

Node.jsでGmailからメールをOAuth認証で送信する流れ

  1. Google Developers ConsoleでOAuth認証のための情報(トークン等)を取得
  2. nodemailerで、1で取得した情報を使ってメールを送信

基本的にはnode.js 上の nodemailer で OAuth 2.0 を使って gmail からメールを送るがとてもわかりやすくて、書かれていることを順番にやっていけば大丈夫です。しかし、リンク先ではxoauth2というモジュールを使っているのですが、メール送信を試みても認証エラーが怒られてしまいます。トークン等が間違ってるんじゃないかと思って何回も確認しましたがそんなことはなかったので、しばらくハマりました。

解決策

xoauth2を使うのをやめて、authに直接指定する。
具体的には以下のようにコードを修正する。

  var nodemailer = require('nodemailer')

  // メッセージ
  var message = {
  	from    : '送信元',   
    to      : '送信先',
    subject : 'タイトル',
    text    : '本文'
  };
  
  // 認証情報
  var auth = {
  	type         : 'OAuth2',
    user         : 'ユーザ名@gmail.com',
    clientId     : 'クライアントID',
    clientSecret : 'クライアントシークレット',
    refreshToken : 'リフレッシュトークン'
  };
  
  // トランスポート
  var transport = {
    service : 'gmail',
    auth    : auth
  };
  
  var transporter = nodemailer.createTransport(transport);

  transporter.sendMail(message, function(err, response) {
    console.log(err || response);
  });

原因

わからん\(^o^)/
nodemailerの仕様変わった?

15
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?