【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

Comments (0)

Skip to main content