2015/05/30

PowerShell Send-MailMessage コマンドレットのサンプル

数年前に書いたPowerShell を使ってEメールを送信するスクリプトはNet.Mail.SmtpClient を利用していましたが、現在はSend-MailMessage コマンドレットはポートを指定できるようになったのでスクリプトを書き直してみました。

PowerShellのバージョンに依存しないEメール送信関数は別記事「PowerShell のバージョンに依存しないEメール送信関数 」で説明します。

Send-MailMessage コマンドレットを使ったメール送信サンプル

サンプルはOutlook.comを使っています。
#Settings
$MailSv = "smtp-mail.outlook.com"
$Port = 587
$Encode = "UTF8"
$address = "xxxxx@outlook.jp"
$Subject = "Send Mail"
$Body = @"
テストです。
見れてますか?
"@

#Credential
$pwd = "xxxxxxx" | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $address,$pwd

#Send Mail
Send-MailMessage `
    -To $address `
    -From $address `
    -SmtpServer $MailSv `
    -Credential $cred `
    -UseSsl `
    -Encoding $Encode `
    -Port 587 `
    -Subject $Subject `
    -Body $Body `
パスワードは要注意
MicrosoftやGoogleの2段階認証設定を行っている場合、パスワードはアプリ固有のものを使う必要があります。
もし、アプリ固有のパスワードを使用しないと下記エラーが発生します。
Send-MailMessage : SMTP サーバーにセキュリティで保護された接続が必要であるか、またはクライアントが認証されていません。 サーバーの応答:5.5.1
アプリ固有のパスワードを取得するには下記記事を参考にしてください。
余談:昔書いたスクリプト
$user = "xxxxx@gmail.com"
$pwd = "xxxxxx"
$mailFrom = $user
$mailTo =$user
$mailSubject = "テスト" 
$mailBody = "test"

$SMTPClient = New-Object Net.Mail.SmtpClient("smtp.gmail.com", 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($user, $pwd);
$SMTPClient.Send($mailFrom, $mailTo ,$mailSubject, $mailBody)
スポンサーリンク

スポンサーリンク