VBAからGmailを送りたくなったら

VBAやKintoneといったものからGMail経由でメールを送りたいという要望は今もまだ結構遭遇します。しかし、現在は通常この手の要望を実現するには、OAuth2.0認証を行ってAPI経由で送るというのがモダンな方法になっていて、SMTP直接送るというのがあまり推奨されていません。とは言え、VBAやkintoneからOAuth認証して送るというのはちょっとハードルが高い。

ということで、現在でも利用できるVBAからGMailに対してメールを送る手法をまとめてみました。

今回利用するファイル等

旧式の「安全性の低いアプリをオン」で送る手法は、ノーマルのGoogleアカウントでは2022年5月30日より廃止されています。GWSでは、2024年秋に停止になるようです。

事前準備

昔と違って、Google WorkspaceのSMTPに直接接続してVBAから送るといったことはセキュリティ上出来ません。また、大量に送るスパムなどでSMTPリレーが悪用されてきた事もあって、故にSMTP直接接続して連続送信というのは昨今は割と制限されていたりします。しかし、少量であるならば有用な手段ではあるので、VBAやkintoneで使うにはとっても有用です。其のためにはGoogle Workspace側でも設定が必要です。

二段階認証をオンにする

2021年10月より、通常のGoogleアカウントでは認証に「2段階認証」が強制されるようになっています。Google Workspaceはそうではない設定も使えるようですが、今どき2段階認証がオンにしていないケースなんてほぼ無いと思われますが、一応以下の手順で二段階認証をオンにすることが可能です。

  1. Googleアカウントのセキュリティ項目にログインする
  2. Googleへのログイン項目の「2段階認証プロセス」をクリック
  3. オンにするセキュリティキーGoogle認証アプリなどでの処理を追加します)

図:二段階認証は今や常識です

アプリパスワードを生成する

SMTPを使ってメールを送るといっても、SMTP認証をGoogleアカウントのパスワードで送るのではなく、アプリパスワードと呼ばれるもので行うようになっているので、以下の手順でアプリパスワードを入手します。

  1. Googleアカウントのセキュリティ項目にログインする
  2. Googleへのログイン項目の「アプリパスワード」をクリック
  3. アプリ選択では、メールを選択
  4. デバイス選択では、Windowsパソコンを選択
  5. 生成ボタンを押す
  6. 16文字の文字列が出てくるのでこれを控えておく(この瞬間しか出ないので注意)

図:アプリパスワードを生成する

ソースコード

VBAからはCDO.messageを利用して送信します。kintoneの場合にはkmailerなどに設定して送ることになります。以下のサンプルはフル機能を使った場合のサンプルなので不要な項目は除外してコードを組み立てます。きちんと送信トレイにも残ります

SMTPリレーサービス

概要

今回の手法の他に、Google Workspaceの場合にはSMTPリレーサービスというものも利用可能です。こちらはノーマルのGoogleアカウントでは設定が出来ません。こちらの場合送信先のSMTPアドレスは「smtp-relay.gmail.com」となります。

こちらは1 日に送信できるお客様あたりの合計の宛先数がユーザ数 ✕ 130の数となっています。

事前準備

Google WorkspaceのAdmin Consoleからルーティングを設定する必要があります。

  1. Admin Consoleにログインする
  2. アプリ→Google Workspace→Gmailを開く
  3. ルーティングを開く
  4. STMPリレーサービスの設定をクリック
  5. 許可する送信者は通常はドメイン内のアドレスを指定します。
  6. 指定したIPアドレスからのみメールを受信するを指定した場合にはIPアドレスレンジを指定する必要(CIDR)があります。IPv6形式での指定も可能です。
  7. SMTP認証を必須にするをした場合、送信者側でも設定が必要です。この時のパスワードも前述の「アプリパスワード」である必要性があります。送信者のユーザ名はアプリパスワードを発行したユーザのメールアドレスになります。
  8. 7.をオンにした場合は通常はTLSによる暗号化を必須にするもチェックを入れます。
  9. 保存をクリックする

MailAppと違ってこの手法の場合、Fromのメールアドレスの書き換えが可能です。送信側がTLSに対応していない場合は、8.の設定は行いません(送信出来ずにエラーになる)

図:この画面でリレーサービス指定をする

送信側の指定

送信側でのポートの指定はSMTPリレーサービスの場合以下のようになる。

  • SMTPのポートはTLS有効化の場合は587となる
  • そうではない場合は、25, 465, 587のいずれかを指定する
  • TLSによる認証をしない場合、SMTP認証は出来ませんのでIPアドレス認証が必要になる

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)