PowerShellでGMailをSMTPサーバーとしてメール送信する方法

こんにちは
けいぞうです。

前回(PowerShellでメールを送信する方法 その2)

前回はSMTPサーバーとしてOffice365(Exchange Online)を使ってPowerShellでメールを送信する方法を書きました。

私はこの方法を採用していますが、
以下のようにいくつか問題点というか、デメリットがあります。

  • Office365のテナントを作る必要がある
  • Exchangeを利用できるライセンスを付与したユーザーを作成する必要がある
  • ライセンスが有料(ただし無料試用版があります。延長も再作成もできるので実質ずっと無料で使えますが、延長したり作り直すのが面倒くさい)

上記のデメリットを大体全てクリアするのが、
SMTPサーバーとしてGmailを使う方法です。

今のところ個人でメール送信アプリを作るならこの方法が決定版かなと思います。

以下、サンプルスクリプトです。


$EmailFrom = "送信元メールアドレス"
$EmailTo = "送信先メールアドレス"
$Subject = "件名" 
$Body = "本文" 
$SMTPServer = "smtp.gmail.com" 
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("Googleアカウント","アプリパスワード"); 
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body) 

前回記載したコマンドレットと全く同じで、SMTPサーバー名がGmailに置き換わるだけです。

ただし、Gmailでこのようにアプリでメールを送信するには以下2つの設定を行う必要があります。

  • 2段階認証プロセスをONにする
  • アプリパスワードを作成する

アプリで指定するパスワードはここで設定したパスワードにすることになります。

上記設定をしていないと以下のようなエラーメッセージが出力されて
送信できませんでした。

 "4" 個の引数を指定して "Send" を呼び出し中に例外が発生しました: "SMTP サーバーにセキュリティで保護された接続が必要であるか、ま
たはクライアントが認証されていません。 サーバーの応答:5.5.1 Authentication Required. Learn more at"
発生場所 行:1 文字:1
+ $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SmtpException 

メール送信をアプリで行うためには「アプリパスワード」を使用する必要があります。

アプリパスワードを生成して使用するためには2段階認証プロセスをONにする必要がある、ということのようです。

これでめでたく誰でも簡単に無料でPowerShellを使ってメール送信を行う
アプリを作ることができますね。

さあ、Googleアカウントをお持ちの方は

上記2つの設定を行なってPowerShellを起動してサンプルスクリプトをコピペしてみてください。

簡単にメールが送信できますよ。