PowerShellのSend-MailMessageで外部コマンドの標準出力を電子メールを送る際に改行を維持する

PowerShellを使うと良い所は、電子メールを簡単に送付できるSend-MailMessageと言う命令があるところである。 これを使って、外部コマンドの標準出力を電子メールとして送るとすると、以下のようになる。


## 管理者権限のPowerShellコンソールで、Set-ExecutionPolicy remotesignedを実行しておく必要がある。
## 使い方:
## powershell -NoProfile -ExecutionPolicy Unrestricted .\send-notification-email.ps1

# 送信する電子メールの本文はUTF-8にする。
$utf8 = ([System.Text.Encoding]::UTF8)

# 差出人
$fromaddress = "fromuser@example.com"

# 宛先として2つの電子メールアドレスを設定する。
$toaddress1 = "touser1@example.jp"
$toaddress2 = "touser2@example.jp"

# 電子メールのSubject
$subject = "件名です"

# 本文は外部コマンドの標準入力から受け取る
$body = C:\jruby-9.2.0.0\bin\jruby.exe .\output-to-stdout.rb

if ($LASTEXITCODE -ne 0)
{
  $email = @{
    From = $fromaddress
    To = "$toaddress1","$toaddress2"
    Subject = $subject
    Body = $body -join "`r`n"
    SMTPServer = "smtp.example.com"
    Encoding = $utf8
  }
  send-mailmessage @email
}
ここで、外部コマンドの標準出力が複数行存在する場合には注意が必要である。 つまり、-join "`r`n"を付けておかないと、全て結合されて1行になってしまう。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

pkgsrc/mail/dkimproxyを使ってみたが、受信時の動作は、現在の用途には合わないようだった

とある過去に利用者のいたドメインを所有しているのだが、相当に雑な運用だったようで、いまだにSPAM以外の電子メールが来るし、 そのドメインの存在しないアカウントを装った電子メールが多く送信されているようだった。 しばらく、キャッチオール設定をして受信してみて気付いた...