Powershellスクリプトにてメールを送信する
今回は、.NetFrameworkのSystem.Net.Mail 名前空間 ()に定義された各クラスを用いてPowershellからメール送信できるようにした。
動作環境
今回動作確認をした環境は以下の通り。
以下のレジストリ値から、.NetFrameworkのバージョンは4.5.1だと分かる。
方法 : インストールされている .NET Framework バージョンを確認する
PS > Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Release Release : 378675 PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4 PSChildName : Full PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PS > $PSVersionTable Name Value ---- ----- PSVersion 4.0 WSManStackVersion 3.0 SerializationVersion 1.1.0.1 CLRVersion 4.0.30319.34014 BuildVersion 6.3.9600.17090 PSCompatibleVersions {1.0, 2.0, 3.0, 4.0} PSRemotingProtocolVersion 2.2
実装方法
実装例は以下の通り。例外処理は省略。
Function Send-Mail([string]$subject, [string]$body, [string]$from_address, [string]$to_address, [string]$smtp_server, [string]$smtp_port, [string]$attached_file, [string]$password) { # SMTPクライアントオブジェクトの生成 $client = New-Object Net.Mail.SmtpClient($smtp_server, $smtp_port) # SMTPクライアントのSSL使用を無効化 $client.EnableSsl = $false # SMTP送信者アカウント認証 if ($password -ne $null) { $client.Credentials = New-Object System.Net.NetworkCredential($from_address, $password) } # メールメッセージオブジェクトの生成 $message = New-Object Net.Mail.MailMessage($from_address, $to_address, $subject, $body) # 添付ファイルの付与 if ($attached_file -ne $null) { $filepath = @(Get-ChildItem $attached_file) $attachment = New-Object Net.Mail.Attachment($filepath) $message.Attachments.Add($attachment) } # メール送信 $client.Send($message) }
その他の方法
上記の方法以外に、Powershellの"Send-MailMessage"コマンドレットでもメール送信が可能となっている。
Send-MailMessage