PowerShell

[PowerShell]メール送信用関数

本記事で使用しているSmtpClientは2018年現在非推奨となっています。
下記記事で紹介しているMailKitをご使用ください。


PowerShellを使ってメール送信する機会が増えてきたので、処理を関数化してみました。

function sendMail(
    $UserID,                            #ユーザーID
    $UserPassword,                      #パスワード
    $MailFrom,                          #From
    $MailToAry,                         #To(配列で指定)
    $MailCcAry,                         #Cc(配列で指定)
    $MailBccAry,                        #Bcc(配列で指定)
    $MailSubject,                       #件名
    $MailBody,                          #本文
    $MailAtthPathAry,                   #添付ファイルのパス(配列で指定)
    $MailEncoding = "utf-8",            #本文と件名のエンコード
    $MailServer = "smtp.office365.com", #メールサーバー
    $MailPort = 587,                    #ポート番号
    $SSLFlg = $true                     #SSLを使用するかどうかを指定
  ){
  
  #Message
  $Msg = New-Object System.Net.Mail.MailMessage
  $Msg.From = $MailFrom
  foreach($MailTo in $MailToAry){
    $Msg.To.Add($MailTo)
  }
  if($MailCcAry -is [array]){
    foreach($MailCc in $MailCcAry){
      $Msg.CC.Add($MailCc)
    }
  }
  if($MailBccAry -is [array]){
    foreach($MailBcc in $MailBccAry){
      $Msg.Bcc.Add($MailBcc)
    }
  }
  $Msg.Subject = $MailSubject
  $Msg.SubjectEncoding = [System.Text.Encoding]::GetEncoding($MailEncoding);
  $Msg.Body = $MailBody
  $Msg.BodyEncoding = [System.Text.Encoding]::GetEncoding($MailEncoding);
  if($MailAtthPathAry -is [array]){
    foreach($MailAtthPath in $MailAtthPathAry){
      if([System.IO.File]::Exists($MailAtthPath)){
        $MailAtth = New-Object System.Net.Mail.Attachment($MailAtthPath)
        $Msg.Attachments.Add($MailAtth)
      }
    }
  }
  
  #Server
  $Smtp = New-Object System.Net.Mail.SmtpClient($MailServer, $MailPort)
  $Smtp.Credentials = New-Object System.Net.NetworkCredential($UserID, $UserPassword)
  $Smtp.EnableSsl = $SSLFlg
  $Smtp.Send($Msg)
  
  $Msg.Dispose()
  $Smtp.Dispose()
  return
}

sendMail "user@hogehogexxx.onmicrosoft.com" "passxxxx" "from@hogehogexxx.onmicrosoft.com" @("to@hogehogexxx.onmicrosoft.com") "" "" "テストメール" "本文1`r`n本文2" @("C:\Test\Test1.docx", "C:\Test\Test2.docx")

Send-MailMessageコマンドレットの方が簡単なのですが、細かく制御できるSmtpClientクラスの方を使っています。

また、標準ではOffice 365のサーバーからメール送信するように初期値を設定しています。

参考Webページ

[Windows 10]Update Complianceで端末のアップデート管理を行う方法前のページ

【アイカツフレンズ!】フレンズスカウト(日向エマ)に参加しました。次のページ

関連記事

  1. PowerShell

    [PowerShell]MailKitを使ってメールを送信する方法

    @ITを眺めていたら、気になる記事を見かけました。Ma…

  2. PowerShell

    UI Automation PowerShell Extensionsを試しに使ってみました。

    「d.sunnyone.org: WindowsアプリのUI自動操作を…

  3. PowerShell

    [PowerShell]MailKitを使ってサーバー上のメールを確認する方法(POP3)

    先日からMailKitを使ってメール送信を行うPowerShellのコ…

  4. PowerShell

    [PowerShell]UI Automationで電卓を操作する方法

    「PowerShell UI Automation 操作」といったキー…

  5. Office関連

    Officeアプリケーションのバージョン情報ダイアログから情報を取得するVBScript

    自分の手間を減らすためのスクリプトシリーズ、今回はWordやExcel…

  6. Office関連

    Excel REST APIをPowerShellから呼び出す方法

    以前Excel REST APIをVBAから呼び出す方法を紹介しました…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP