こんにちは
けいぞうです。
先月友人に
「ビットコインが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」というのは私が命名した名前なので何でも良いです
最近のコメント