こんにちは
けいぞうです。
先月友人に
「ビットコインが100万円に戻ったら通知してくれるやつ作って」
と依頼されたので、
PowerShellのモジュールを作成しました。ps1ファイルですね。
ps1ファイルはbatファイルから呼び出すようにし、
タスクスケジューラに登録して1時間に1回の繰り返し実行をすることにしています。
ps1ファイルの中ではBitCoinの最新の価格を記したファイル(別モジュールで15分に1回更新)を取得して、
100万円を超えていたら特定のメールアドレスにメールを送るということをしています。
この「メールを送る」というのが今回初めてでした。
といっても「自前のSMTPサーバーさえあれば」超簡単です。
以下、サンプルコードです。
# 宛先 $to = "testTo@example.com" # 送信元 $from = "testFrom@example.com" # SMTPサーバー $smtp = "localhost" #IPアドレスでもホスト名でもいけます # 件名 $subject = "件名" # 本文 $body = "本文" # ポート $port = 25 # メールを送信します Send-MailMessage -To $to -From $from -SmtpServer $smtp -Subject $subject -Body $body -Port $port -Encoding UTF8
たったこれだけ!楽勝~~
自前のSMTPサーバーをお持ちの方はPowerShellを起動してサクッとコピペしてみてください。送れます。
実際のところはSMTPサーバーなんて無い、
localにたてるのも面倒くさいって人がほとんどだと思います。
私もそうです。
私も実のところこの方法じゃなくて、 Office365のサーバー、いわゆるExchange Onlineを使ってメールを送信する方針を採用しました。
次回はそちらを紹介したいと思いますが、上記の方法を採れるなら断然楽です。
付録:::
実際のコードを載せておく(設定値はダミー)
BitCoinThresholdMail.ps1 - メインのモジュール
#設定ファイルを取得
$SettingPath = "設定ファイルのパス\IberryConfig.xml"
$Settingxml = [xml](Get-Content -Encoding Default $SettingPath)
#共通系メール設定
$MailCommonSetting = $Settingxml.IberrySetting.MailConfig.MailCommonSetting
$SMTPServer = $MailCommonSetting.SMTPServer.ToString()
$Port = $MailCommonSetting.Port.ToString()
$O365User = $MailCommonSetting.O365User.ToString()
$O365Pass = $MailCommonSetting.O365Pass.ToString()
#その他の設定
$BitCoinThresholdMail = $Settingxml.IberrySetting.MailConfig.BitCoinThresholdMail
$Subject = $BitCoinThresholdMail.Subject.ToString()
$Body = $BitCoinThresholdMail.Body.ToString()
$EmailFrom = $BitCoinThresholdMail.MailFrom.ToString()
$EmailTo = $BitCoinThresholdMail.MailTo.ToString()
$Threshold = $BitCoinThresholdMail.Threshold.ToString()
$NowPricePath = $BitCoinThresholdMail.NowPricePath.ToString()
$logFilePath = $BitCoinThresholdMail.logFilePath.ToString()
$NowPrice = Get-Content $NowPricePath
$Body = $Body -f $Threshold
$Subject = $Subject -f $Threshold
#メール送信判断
$SendMailFlag = $false
if([int]$NowPrice -gt [int]$Threshold) {
$SendMailFlag = $true
}
$date = Get-Date
"($date)" + "現在価格:" + $NowPrice + ", 閾値:" + $Threshold | Out-File $logFilePath -Encoding UTF8 -Append
#メール送信処理
try {
if($SendMailFlag){
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, $Port)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($O365User,$O365Pass);
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
"メールを送信しました。" | Out-File $logFilePath -Encoding UTF8 -Append
"送信先:" + $EmailTo | Out-File $logFilePath -Encoding UTF8 -Append
}
}catch{
$_.Exception.Message | Out-File $logFilePath -Encoding UTF8 -Append
}
BitCoinThresholdMail.bat – ps1モジュールを呼び出すbatファイル
powershell -FILE ”ps1ファイルのパス"\BitCoinThresholdMail.ps1
IberryConfig.xml - 設定ファイル
<?xml version="1.0"?>
<IberrySetting>
<MailConfig>
<!--メール共通設定-->
<MailCommonSetting>
<SMTPServer>smtp.offoce.com</SMTPServer>
<Port>587</Port>
<O365User>O365ユーザー名</O365User>
<O365Pass>パスワード</O365Pass>
</MailCommonSetting>
<BitCoinThresholdMail>
<MailTo>メール送信先</MailTo>
<MailFrom>メール送信元</MailFrom>
<Subject>Bitcoinの価格が{0}円に到達しました。</Subject>
<Body>BitCoinの価格が{0}円に到達しました。
このメールは自動送信されています。返信しないでください。
返信してもいいです。</Body>
<Threshold>1,000,000</Threshold>
<NowPricePath>"BitCoin現在価格テキストのパス"\NowPrice.txt</NowPricePath>
<logFilePath>ログファイル出力先\BitCoinThresholdMail.log</logFilePath>
</BitCoinThresholdMail>
</MailConfig>
</IberrySetting>
※「IBerry」というのは私が命名した名前なので何でも良いです



最近のコメント