PowerShellから添付ファイルを付けてメール送信を行う方法について紹介します。
コピペでそのまま利用できるはずですので、PowerShellを利用してログファイルの定期的な送信 や バッチで処理したファイルを自動送信する、など色々な効率化に活用してください。
テストした環境
Windows 10 home 1903
PowerShell version 6.2
スクリプトと解説
スクリプトは以下になります。関数化してますのでコピペしてメール設定の部分を書き換えればそのまま利用できます。今後はすこしづつ機能追加していければと思ってます。
- 添付ファイルをつけて送信するには、引数に$attachFilePathに添付ファイルのパスを指定してください。引数を指定しない場合には添付ファイルなしでメール送信できます。
- 宛先には複数指定することができます
- 利用できるメールサーバは認証なしでの25番ポートのみです。
<#
[説明]
PowerSHellからメール送信を行います。
添付ファイルを付けてのメール送信も可能です。
[パラメータ]
fromAddress 送信アドレス
toAddresses 送信先アドレス、複数指定可能
subject 題名
body 本文
mailServer メールサーバ(25番ポートのみで認証には非対応)
attachFilePath 添付ファイルのパス
#>
function sendMail {
[CmdletBinding()]
param (
[Parameter(Mandatory)][Alias("from")][string]$fromAddress,
[Parameter(Mandatory)][Alias("to")][array]$toAddresses,
[Parameter(Mandatory)][string]$subject,
[Parameter(Mandatory)][string]$body,
[string]$encoding = "utf-8",
[Parameter(Mandatory)][string]$mailServer,
[string]$attachFilePath
)
[System.Net.Mail.MailMessage]$mail = New-Object System.Net.Mail.MailMessage
$mail.From = $fromAddress
foreach ($toAddress in $toAddresses) {
$mail.To.Add($toAddress)
}
$mail.Subject = $subject
$mail.Body = $body -join "`r`n"
$mail.SubjectEncoding = [System.Text.Encoding]::GetEncoding($encoding)
$mail.BodyEncoding = [System.Text.Encoding]::GetEncoding($encoding)
# 添付ファイルがある場合には添付
if ($attachFilePath) {
$mail.Attachments.Add($attachFilePath)
}
$smtp = New-Object System.Net.Mail.SmtpClient($mailServer)
$smtp.Send($mail)
}
#*********************************
# メール設定
#*********************************
$fromAddress = '送信元アドレス'
$toAddresses = @('送信先アドレス1','送信先アドレス2','送信先アドレス3')
$mailServer = 'メールサーバ'
$attachFileName = '添付ファイル名' # スクリプトと同じ場所に配置すること
$attachFilePath = (Split-Path ( & { $myInvocation.ScriptName } ) -parent)+'\'+$attachFileName
$subject = 'メール題名'
$body = "
○○さん
お疲れ様です。○○です。
○○の件について連絡します。
添付ファイルを参照ください。
以上
"
# メール送信を実行
sendMail -from $fromAddress -to $toAddresses -subject $subject `
-body $body -mailServer $mailServer `
-attachFilePath $attachFilePath
# End Script...
以上
コメント