今回は、PowerShellのバージョンに依存しないEメール送信関数を書いてみました。
バッチ処理の結果をメール送信する仕組みなど、PowerShellのバージョンが新しい環境へ移行する時にこの関数を使っておけば楽かもしれません。。
環境に依存しないEメール送信関数
Send-Email関数は実行する環境において- PowerShellのバージョンをチェックし
- v2ならSmtpClientを利用する
- v3以上ならSend-MailMessage コマンドレットを利用する
尚、メール送信はOutlook.comのアカウント、SMTPサーバーを利用します。
function Send-Email
{
[Cmdletbinding()]
param
(
[string]$To,
[string]$Subject,
[string]$Body
)
#Settings
$SmtpSv = "smtp-mail.outlook.com"
$User = "xxxxx@outlook.jp"
$Pwd = "xxxxxxx"
$Port = 587
$Encode = "UTF8"
$From = $User
switch($PSVersionTable.PSVersion.Major)
{
#PowerShell v2
{$_ -eq 2}{
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpSv, $Port)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($User, $Pwd);
$SMTPClient.Send($From, $To ,$Subject, $Body)
}
#PowerShell v3 and Over
{$_ -gt 2}{
#Credential
$Pwd = $Pwd | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $From,$pwd
#Send
Send-MailMessage `
-SmtpServer $SmtpSv `
-Credential $cred `
-UseSsl `
-Encoding $Encode `
-Port $Port `
-To $To `
-From $From `
-Subject $Subject `
-Body "$Body" `
}
}
}
