Windows Server 2012 R2 からPowerShellを使ってGmailを送る方法

前回、Windows PowerShell を使ってメールを送信する方法を記載しましたが、今回はPowerShellを使ってGmailを送る方法を記載します。 結論としては以下ようにSend-MailMessageコマンドを正しく実行すれば、Gmailからメールを送信できます。

PS C:\Users\administrator> Send-MailMessage -To “yamada@gmail.com” -From “suzuki@gmail.com” -SmtpServer “smtp.gmail.com” -Credential “suzuki@gmail.com” -Subject “明日の予定” -Encoding “UTF8” -UseSsl -Port “587”

まず、Gmailに限らずメールを送信するには以下の情報が必要ですので、ここから取り掛かりましょう。
・メール送信サーバ(SMTPサーバ)のホスト名、またはIPアドレス
・メール送信サーバがメールクライアントからの要求を受け付けるポート番号
・メール送信サーバの認証情報(ユーザ名とパスワード)

[メール送信サーバのホスト名]
Gmailのメール送信サーバのFQDNは “smtp.gmail.com” です。これはGoogleが
公開
していますので、Google検索で見つけることができる情報です。IPアドレスは以下のようにnslookupコマンドで確認できますが、IPアドレスは予告なく変更されるものなので、通常は FQDN を使います。

C:\Users\Administrator>nslookup
> set type=A
>smtp.gmail.com

権限のない回答:
名前: gmail-smtp-msa.l.google.com
Addresses: 74.125.203.109
74.125.203.108
Aliases: smtp.gmail.com

[メール送信サーバがメールを受け付けるポート番号]
これもGoogleが公開しています。TLSはSSLの後継のプロトコルなので、利用するポートは587を指定すれば良いでしょう。
・SSL のポート: 465
・TLS / STARTTLS のポート: 587

[メール送信サーバの認証情報]
・ユーザ名は自分のgmailアカウント(Gmailアドレス)です
・パスワードは2段階認証を有効にしているかどうかで異なります。

2段階認証を有効にしている場合
Googleのパスワードは使えません。ここからapp passwordを発行して、これを利用する必要があります。

2段階認証を利用していない場合
Googleのパスワードが使えます。ただし、Googleのアカウントで、「安全性の低いアプリからのアカウントへのアクセスを許可する」必要があります。

Gmailからメールを送る時に躓くところが上記で説明した認証方法です。認証がうまくいかない場合は以下のようなエラーメッセージが表示されます。

Send-MailMessage : SMTP サーバーにセキュリティで保護された接続が必要であるか、またはクライアントが認証されていません。 サーバーの応答:5.5.1 Authentication Required. Learn more at
Send-MailMessage -To “yamada@gmail.com” -From “suzuki@gma …
~~~~~~~~~~~~~~~~~
+CategoryInfo : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage]、SmtpException
+FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage

以上、ここまでやればPowerShellからメールを送信できるはずです。

コメント