Powershell

[PowerShell]添付ファイル付のメール送信方法

Powershell

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...

以上

コメント