タイトルのような処理が必要ということでPowershellを使ってメールを送信するファイルを作ることに。
Powershellでメールなんて送ったことがないので調べつつ作っていきます。
前回同様今後また使うかもしれないのでメモ書き程度に。
組んでいく
・Powershellでメールを送るには
Send-MailMessage
というコマンドレットでメールが送れるらしい。
送る本文の内容はテキストファイルから読み込みたいのでGet-Content
を使ってみる。
# 宛先メールアドレス
$to = "to@address.co.jp"
# 送信元メールアドレス
$from = "from@address.co.jp"
# SMTPサーバー
$smtp = "01.234.567.89"
# 件名
$subject = "Powershell Message test"
# 本文
[string]$body = @()
$body = (Get-Content D:\test\temp\send.txt) -join "`n"
# メールを送信します
Send-MailMessage -To $to -From $from -SmtpServer $smtp -Subject $subject -Body $body -Encoding UTF8
ちなみに送りたいファイルは先日Qiitaに書いてみたSQLServerの使用率を表示させたもの。
db_size
使用率…13%
使用率80%以下です。
-------------------------------------------------------------
db_log
使用率… 0%
使用率80%以下です。
-------------------------------------------------------------
・実行結果
きちんとfrom@address.co.jpよりto@address.co.jpへメールが送信され、本文もsend.txtの内容そのまま送信出来ていた。
ちなみに #本文 にある -join "`n"` がないと
db_size 使用率…13% 使用率80%以下です。 ------------------------------------------------------------- db_log 使用率… 1% 使用率80%以下です。
という風に改行されず送信されるみたいなので入れています。
後はencodeをUTF8にすることで、していないと文字化けしたりするらしい。気を付けよう。
##2019/01/17 追記
コメントを頂きました。-raw オプションでもいけるとのこと。
実際試してみて、-rawのほうが断然いいですね。
調べてみましたが、-join "`n"`がないとダメみたいなことを書いていましたが、それはPowershell 2.0までらしい。
Powershell 3.0から -raw オプションが使えるみたいです。
3.0はWindows8やWindows Server 2012以降標準搭載みたいなのでこれからは -raw を使っていきます。
コメントありがとうございました!とても勉強になりました。