【PowerShell】Windows PowerShell を使用して GMail や Office 365 からメールを送信する

超軽い話題を。

Windows PowerShell を使用してメールを送信するには Send-MailMessage コマンドレットを使用します。例えば、以下のように使います。

Send-MailMessage -To junichia@ms.com -From junichia@hoge.com -SmtpServer smtp.hoge.com -Credential junichia -Subject "パスワード未変更者へ" -Body "パスワードを変更してください!" -UseSsl

-Credential はSMTPサーバーに接続するための資格情報です。事前に Get-Credential で設定してもよいですし、上の例のように指定すればパスワード入力のためのポップアップが表示されます。

このように、Send-MailMessage は簡単でとても便利なのですが、SMTP のポート番号を変更できないという難点があります。

例えば、Gmail 、Office 365 、Hotmail ともに、メッセージのサブミッション時には Port 587 を使用しています。そのため、Send-MailMessage を使用してメールを送信することができません。

では、どうしたらよいかというと、.NET Framework の Net.Mail.SmtpClient を直接使用します。

例えば、gmail の場合には SMTPサーバーは smtp.gmail.com なので 以下のように書きます。

$EmailFrom = “user@gmail.com” $EmailTo =”junichia@ms.com” $Subject = "タイトル" $Body = "本文"  $SMTPServer = "smtp.gmail.com" $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) $SMTPClient.EnableSsl = $true $SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“user@gmail.com”, "password”); $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

Office 365 ならば以下の通りです。

$EmailFrom = “user@hoge.onmicrosoft.com” $EmailTo =”junichia@ms.com” $Subject = "タイトル" $Body = "本文" $SMTPServer = "pod51021.outlook.com" $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) $SMTPClient.EnableSsl = $true $SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“user@hoge.onmicrosoft.com”, "password”); $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

知っていれば簡単ですね。

Scripting Guy の以下の投稿も参考にしてください。
Send Email from Exchange Online by Using PowerShell - Hey, Scripting Guy! Blog - Site Home - TechNet Blogs