2017年11月18日土曜日

Windowsでメール送信のスクリプトを使う場合の注意点

久しぶりにWindowsでメール送信のスクリプトを使う必要があって、簡単なスクリプトを書いたのだが、Gmailのsmtpを利用しようとして、最初、どうしても認証が通らずハマってしまった。

Windowsのスクリプトを使用してメールを送信するためには、Windowsスクリプト(VBScript)を利用する方法や、Powershellを利用する方法など幾つかの方法がある。

Windowsスクリプト(VBScript)は、Windows XPなどの古いOSでも使用できるので、最も汎用性が高い。しかしVBScriptをメール送信に利用する場合には注意が必要だ。VBScriptのCDO.Message は、smtp(ポート25)とSSL(ポート465)にしか対応していないので、TLS / STARTTLS (ポート587) の SMTP 認証には利用できない。この点の情報はネット上にはほとんど出ていないので、注意が必要だ。

Powershellを使用してSSLやTLS / STARTTLSの認証を利用する場合には、. NET FrameworkのSMTPメール送信クラス(System.Web.Mail.SmtpMail)を使用する必要がある。従ってPowershellスクリプトを使用する場合には、. NET Framework 2.0以上がシステムにインストールされている必要がある。

しかし、最もハマったのは、GmailのSMTP認証を通すための準備作業だ。以前は特別な準備など必要なく、簡単にGmailのsmtp(ポート 25)を利用してメールが送信できたのだが、スパムメールの送信に悪用されたりしたためか、現在Gmailのsmtpを利用するためには以下の準備作業が必要になる。

  1. 最初に、スクリプトを使用するPC(これ重要)からGmailのアカウント設定にアクセスして、「安全性の低いアプリによるアカウントの使用」を許可する。
  2. Gmailの「2段階認証」を設定していない場合には、「2段階認証」の設定を行う。
  3. Gmailの「アプリパスワード」を取得する。アプリパスワードは、スクリプトを使用するPCごとに取得する必要がある。(アプリパスワードは複数のPCで使い回すことができない。)
  4. アプリパスワードを、メール送信スクリプトのパスワード欄に記入する。

以上の準備をして初めて、WindowsのスクリプトからGmailのsmtpを利用できるようになる。これらの情報は、ネット上には散発的にしか出ていないようなので、まとめておくことにした。