nodemailerでGmailのエイリアスのアドレスから送信できるようにする

2020/07 時点での記事となります。

G Suite前提での手順となってしまいますが、参考になればと思います。


[ひとことでいうとこんな記事]

nodemailerからメール送信する際、自分の所持しているメルアドを利用せずにエイリアス(Info@, sales@ 等)のアドレスからの送信が可能です!


[こんな人におすすめ]

  • メディアを作ることになったが、お問い合わせの自動返信機能で個人アドレスを使うわけにはいかない人

[目次]

  • 参考記事
  • 手順1. Google OAuth 2.0 設定
  • 手順2. G Suite で エイリアスアドレスの追加
  • 手順3. Gmail で エイリアスアドレスの追加・デフォルト設定
  • 手順4. nodemailerでメール送信スクリプトを作成
  • まとめ

参考記事

参考にさせていただいた記事です。ありがとうございます。

node.js 上の nodemailer で OAuth 2.0 を使って gmail からメールを送る

そして、nodemailerでのエイリアスアドレスでの送信に関してはstackoverflowのコメント欄を参考に設定をいたしました

Nodemailer send emails using original user account instead of alias

手順1. Google OAuth 2.0 設定

1-1 Google APIs でプロジェクト作成

  1. Google APIs ページで、「プロジェクトを作成」をクリック。(もしくは、プロジェクト選択タブをクリックし「新しいプロジェクト」をクリック)
  2. 「プロジェクト名」を入力し、「作成」をクリック。

nodemailer-send-emails-using-alias-address-for-gmail.001

1-2 OAuth 同意画面 の設定

  1. 「OAuth 同意画面」をクリック
  2. 「アプリケーション名」を入力
  3. 「保存」をクリック

nodemailer-send-emails-using-alias-address-for-gmail.002

1-3 OAuth 2.0 クライアントIDの作成

  1. 「認証情報」をクリック
  2. 「認証情報を作成」をクリックし、「OAuth クライアント ID」を選択
  3. 「アプリケーションの種類」で「Webアプリケーション」を選択し、「名前」を入力

nodemailer-send-emails-using-alias-address-for-gmail.003

クライアントIDクライアントシークレットが表示されるので、保存しておく。

nodemailer-send-emails-using-alias-address-for-gmail.004

1-4 Gogle Developers OAuth 2.0 Playground で Reflesh Token の取得

  1. Google Developers OAuth 2.0 Playgroundページを開く
  2. 右上の「⚙歯車ボタン」をクリックする
  3. 以下のような情報を入力する

nodemailer-send-emails-using-alias-address-for-gmail.005

項目
OAuth flow Server-side
OAuth endpoints Google
Authorization endpoint そのまま (https://accounts.google.com/o/oauth2/v2/auth)
Token endpoint そのまま (https://oauth2.googleapis.com/token)
Access token location Authorization header w/ Bearer prefix
Access type Offline
Force approval prompt No
Use your own OAuth credentials チェックボックスをクリック
OAuth Client ID さきほど取得した クライアントID
OAuth Client secret さきほど取得した クライアントシークレット
  1. 「Step 1」を選択
  2. 「Input your own scopes」に「 https://mail.google.com/ 」を入力し「Authorize APIs」を押す
  3. 「Google OAuth 2.0 Playground に移動」と表示されるので、対象のGoogleアカウントを選択
  4. 「Google OAuth 2.0 Playground が Google アカウントへのアクセスをリクエストしています」と表示されるので「許可」を選択

nodemailer-send-emails-using-alias-address-for-gmail.006

  1. 「Step 2」に進んだら「Exchange authorization code for tokens」を押す
  2. Reflesh tokenが表示されるので、保存しておく

nodemailer-send-emails-using-alias-address-for-gmail.007

手順2. G Suite で エイリアスアドレスの追加

2-1 Google管理コンソール

  1. Google Adminにアクセスし、「ユーザー」をクリック

2-2 ユーザーに紐づくエイリアスアドレスを作成

  1. 先程**手順1を行ったGmailアカウント**をクリック
  2. 「ユーザー情報」をクリック
  3. 「メールエイリアス」をクリックし、エイリアス名を入力したら「保存」を押す

nodemailer-send-emails-using-alias-address-for-gmail.008

手順3. Gmail で エイリアスアドレスの追加・デフォルト設定

3-1 エイリアスアドレスの追加・認証

  1. Gmail右上の「歯車ボタン」を押し、「すべての設定を表示」を押す
  2. 「アカウント」タブをクリックする
  3. 「名前」の欄に「他のメールアドレスを追加」とあるのでクリック
  4. 「エイリアスとして扱います」にチェックをつけ、「名前」と**手順2で準備したエイリアスのアドレス**を入力
  5. 確認メールでの認証が必要といわれるので、「確認メールの送信」をクリック
  6. 届いた確認メールのリンクをクリックするか、確認コードを入力し「確認」をクリック

nodemailer-send-emails-using-alias-address-for-gmail.009

3-2 エイリアスアドレスを送信メールのデフォルトに設定

  1. Gmailの設定画面に戻ると**3-1で設定されたエイリアスアドレス**が追加されています
  2. エイリアスアドレスのほうを**「デフォルトに設定」**をクリックする

(※これがないと、nodemailerで送信した際に、エイリアスのアドレスから送信されたことにならず、元のアドレスからの送付となってしまいます。)

手順4. nodemailerでメール送信スクリプトを作成

4-0 手順1で準備したものの確認

  • Client ID
  • Client Secret
  • Reflesh Tken

4-1 nodemailerのpackageをインストール

  1. npm でも yarn でも

4-2 OAuthの情報をnodemailerに準備

const nodemailer = require('nodemailer')

const auth = {
  type: 'OAuth2',
  user: 'alias@adress', // エイリアスのアドレス
  clientId: 'clientId', // Client ID
  clientSecret: 'clientSecret', // Client Secret
  refreshToken: 'refleshToken', // Reflesh Token
}

const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth
})

4-3 メール情報を準備・メール送信

const mailOptions = {
  from: `エイリアス <alias@mail.com>`, // エイリアスのアドレスと名前
  to: `send_to@mail.com`, // TO
  bcc: `blind@mail.com`, // BCC
  subject: `Subject`, // タイトル
  text: `text` // 本文
}

transporter.sendMail(mailOptions)

まとめ

以上の方法で、エイリアスのメールアドレスを用いたnodemailerの送信が可能になりました。

ガッツリとシステムを組む場合にはこのような手法をとらないような気もしますが、スモールビジネスで小さくはじめたい方などは、Googleのようなプラットフォームにのっかるのも手ではないでしょうか?

最終的に Firebase Functions にメール送信は任せたいと思います。