Last Update : 24/Oct/2015
Outlookへの新規メール受信時にAndroid端末にPush通知を送る方法の例です。
以前、Node.js経由でPushbulletに通知を送信する方法を書きましたが、今回は、IFTTT経由でPushbulletにトリガーを送る方法を考えてみました。
Outlookのマクロに簡易スパムフィルタとメールでの通知のリモートOn/Off機能を追加しています。
IFTTTにトリガーメールを送りますので、Gmail等にメールを転送するのとあまり変わらないのですが、Outlookのマクロのスタディも兼ねて作ってみましたので、興味のある方はご自分の用途や環境に合わせてアレンジしてみてください。
(参考)
Pushbullet APIでOutlookへの新規メール受信をAndroidにPush通知する
http://galaxy-shw-m110s.blogspot.kr/2014/12/pushbullet-apioutlookandroidpush_5.html
・職場のメールはOutlook(Exchangeサーバー)でProxy環境下。
・Outlookの仕訳ルールでの自動転送はサーバー側でブロックされている。
・Gmail等のメール、SNS、PushbulletへのアクセスはProxyで撥ねられる。
・モバイル端末からVPNやセキュアなクライアントアプリを利用したメール閲覧は許可されている。
・モバイル端末のクライアントアプリへのメールのPushサービスが提供されていない。
PCのバックグラウンドで動作しますので、PCは常に稼働したままで、Outlookも常に起動したままにしておく必要があります。
・スパム確認(送信者/表題)
・トリガーメール作成
・特定の送信者/表題のメールを受信した場合は通知のOn/OFFを切替え結果を通知
・IFTTTにトリガーメールを送る
・トリガーを受信したIFTTTからPushbulletにPush通知を送る
・ リモート操作用ファイル 3種類
・ スパムフィルタ用ファイル 2種類
・ IFTTTアカウント(https://ifttt.com)
・ Pushbulletアプリ(Android側:https://play.google.com/store/apps/details?id=com.pushbullet.android)
受信したメールがExchangeメールの場合はサーバーにアクセスして送信者のEmailアドレスを取得する処理も行います。
外部のテキストファイルに記述した送信者のメールアドレスや表題の先頭部分(デフォルトは5文字)との照合を行う簡易スパムフィルタ機能や、特定の送信者からの特定の表題のリモートメールで通知のOn/OffしてPush通知先にOn/Off状態を通知する機能も追加しています。
[動作内容]
1) 受信メールから表題や送信者情報を取得
2) 送信者名と送信者のEmailアドレスの処理
・送信者名と送信者のEmailアドレスが同じ場合はEmailアドレスのみ表示
・送信者のメールアドレスがEmailの場合は送信者名とEmailアドレスの両方を表示
・送信者のメールアドレスがExchangeの場合はSMTPアドレスを取得
3) スパムフィルタ
・スパム確認(送信者のEmailアドレス)
・スパム確認(表題)
4) メッセージ作成
5) 通知のOn/Offのリモート操作
・特定の送信者/表題のメールを受信した時にマクロをOn/Offし通知先に通知
6) 通知のOn/Off状態の確認
7) 表題と本文を加工して送信
・本文から余計な空白と改行コードを削除
・本文の文字数を制限
・通知メールを送信
PC上でバッチファイルをクリックして通知をOn/Offする事も出来ます。
以下の3個のファイルをマクロ内で指定したフォルダ内に保存しておいて下さい。
1) Stop_Pushing.bat
cd/
cd C:\環境に合わせて書き換えてください\IFTTT\
ren Push_is_On_Now.txt Push_is_Off_Now.txt
2) Start_Pushing.bat
cd/
cd C:\環境に合わせて書き換えてください\IFTTT\
ren Push_is_Off_Now.txt Push_is_On_Now.txt
3) Push_is_On_Now.txt
このファイルは中身は空で構いません。
1) spamlist.txt
Androidに通知を送る必要のないメールの送信者のメールアドレスを記入します。
送信者名等のメールアドレス以外の記述や改行等が含まれていても問題ありません。
2) keyword.txt
Androidに通知を送る必要のないメールの表題を記入します。
但し、表題の冒頭部分(デフォルトは5文字)しか照会しませんので、注意して下さい。
IFTTTにトリガーメールを送りますので、Gmail等にメールを転送するのとあまり変わらないのですが、Outlookのマクロのスタディも兼ねて作ってみましたので、興味のある方はご自分の用途や環境に合わせてアレンジしてみてください。
(参考)
Pushbullet APIでOutlookへの新規メール受信をAndroidにPush通知する
http://galaxy-shw-m110s.blogspot.kr/2014/12/pushbullet-apioutlookandroidpush_5.html
想定される環境
以下の様な環境下での使用を想定しています。・職場のメールはOutlook(Exchangeサーバー)でProxy環境下。
・Outlookの仕訳ルールでの自動転送はサーバー側でブロックされている。
・Gmail等のメール、SNS、PushbulletへのアクセスはProxyで撥ねられる。
・モバイル端末からVPNやセキュアなクライアントアプリを利用したメール閲覧は許可されている。
・モバイル端末のクライアントアプリへのメールのPushサービスが提供されていない。
PCのバックグラウンドで動作しますので、PCは常に稼働したままで、Outlookも常に起動したままにしておく必要があります。
全体の動作の流れ
・Outlookのマクロで新規メール受信時に表題・送信者名・本文(一部)を取得・スパム確認(送信者/表題)
・トリガーメール作成
・特定の送信者/表題のメールを受信した場合は通知のOn/OFFを切替え結果を通知
・IFTTTにトリガーメールを送る
・トリガーを受信したIFTTTからPushbulletにPush通知を送る
必要なもの
・ Outlook用マクロ(詳細下記)・ リモート操作用ファイル 3種類
・ スパムフィルタ用ファイル 2種類
・ IFTTTアカウント(https://ifttt.com)
・ Pushbulletアプリ(Android側:https://play.google.com/store/apps/details?id=com.pushbullet.android)
Outlook用マクロ
新規メール受信時に自動起動し、受信メールから表題・送信者名・本文を取得して加工し、IFTTTにトリガー(メール)を送るマクロです。受信したメールがExchangeメールの場合はサーバーにアクセスして送信者のEmailアドレスを取得する処理も行います。
外部のテキストファイルに記述した送信者のメールアドレスや表題の先頭部分(デフォルトは5文字)との照合を行う簡易スパムフィルタ機能や、特定の送信者からの特定の表題のリモートメールで通知のOn/OffしてPush通知先にOn/Off状態を通知する機能も追加しています。
[動作内容]
1) 受信メールから表題や送信者情報を取得
2) 送信者名と送信者のEmailアドレスの処理
・送信者名と送信者のEmailアドレスが同じ場合はEmailアドレスのみ表示
・送信者のメールアドレスがEmailの場合は送信者名とEmailアドレスの両方を表示
・送信者のメールアドレスがExchangeの場合はSMTPアドレスを取得
3) スパムフィルタ
・スパム確認(送信者のEmailアドレス)
・スパム確認(表題)
4) メッセージ作成
5) 通知のOn/Offのリモート操作
・特定の送信者/表題のメールを受信した時にマクロをOn/Offし通知先に通知
6) 通知のOn/Off状態の確認
7) 表題と本文を加工して送信
・本文から余計な空白と改行コードを削除
・本文の文字数を制限
・通知メールを送信
'Outlook受信メールプッシュ通知マクロ(IFTT版) Ver 1.30 Private Sub Application_NewMailEx(ByVal EntryIDCollection As String) Dim objItem Set objItem = Session.GetItemFromID(EntryIDCollection) If objItem.MessageClass = "IPM.Note" Then AutoForward objItem End If End Sub Private Sub AutoForward(ByVal objMail As MailItem) ' '[ユーザー設定項目] ' 'トリガー送信先アドレスを指定 Const ForwardToAddress = "trigger@recipe.ifttt.com" ' 'マクロ中断/再開用リモート操作メールの送信者アドレスを指定 Const MailStopAddress = "XXXXXXXX@gmail.com" ' '設定ファイルのPATHを指定 Const FilePATH = "C:\環境に合わせて書き換えてください\IFTTT\" ' '[変数] ' Dim strFileName As String Dim fwMail As MailItem Dim i As Integer Dim buf As String Dim strSpamFile1 As String Dim strSpamFile2 As String Dim strSpamList1 As String Dim strSpamList2 As String Dim strSenderName As String Dim strSenderEmailAddress As String Dim strSubject As String Dim strBody As String Dim strShortBody As String Dim strRepBody As String Dim strShortSubject As String Dim strStatusFile As String Dim strStatus As String Dim strStartPushFile As String Dim strStopPushFile As String ' strSpamFile1 = FilePATH & "spamlist.txt" strSpamFile2 = FilePATH & "keyword.txt" strStatusFile = FilePATH & "Push_is_On_Now.txt" strStartPushFile = FilePATH & "Start_Pushing.bat" strStopPushFile = FilePATH & "Stop_Pushing.bat" ' '受信メールの自動仕分けルールや迷惑メールフィルタと併用した場合のエラー対策 On Error GoTo ErrorTrap ' '[受信メールから表題や送信者情報を取得] ' strSubject = objMail.Subject '表題を取得 strSenderName = objMail.SenderName '送信者名を取得 strSenderEmailAddress = objMail.SenderEmailAddress 'Emailアドレスを取得 strBody = objMail.Body '本文を取得 ' '[送信者名と送信者のEmailアドレスの処理] ' '送信者名と送信者のEmailアドレスが同じ場合はEmailアドレスのみ表示 If strSenderName = strSenderEmailAddress Then strSenderName = strSenderEmailAddress Else '送信者のメールアドレスがEmailの場合は送信者名とEmailアドレスの両方を表示 If InStr(strSenderEmailAddress, "@") Then strSenderName = strSenderName + "<" + strSenderEmailAddress + ">" Else '送信者のメールアドレスがExchangeの場合はSMTPアドレスを取得 strSenderEmailAddress = _ objMail.Sender.PropertyAccessor.GetProperty("http://schemas." _ & "microsoft.com/mapi/proptag/0x39FE001E") End If End If ' '[スパムフィルタ] ' 'スパムリスト(送信者のEmailアドレス)の取込 Open strSpamFile1 For Input As #1 Do Until EOF(1) Line Input #1, buf strSpamList1 = strSpamList1 + buf strSpamList1 = Replace(strSpamList1, vbCrLf, "") Loop Close #1 ' 'スパムリスト(表題)の取込 Open strSpamFile2 For Input As #1 Do Until EOF(1) Line Input #1, buf strSpamList2 = strSpamList2 + buf strSpamList2 = Replace(strSpamList2, vbCrLf, "") Loop Close #1 ' '表題の先頭部分を抽出(デフォルトは5文字) strShortSubject = Mid(strSubject, 1, 5) ' 'スパム確認(送信者のEmailアドレス) If InStr(strSpamList1, strSenderEmailAddress) > 0 Then Exit Sub Else End If ' 'スパム確認(表題) If InStr(strSpamList2, strShortSubject) > 0 Then Exit Sub Else End If ' '[メッセージの作成] ' '受信メールをOFTとして保存しOFTから新規メッセージを作成 strFileName = Environ("TEMP") & "~forward.oft" '受信メールをOFTとして保存 objMail.SaveAs strFileName, olTemplate Set fwMail = Application.CreateItemFromTemplate(strFileName) 'メッセージを作成 ' '元メールから宛先を削除 With fwMail.Recipients For i = .Count To 1 Step -1 .Remove i Next End With ' '元メールから添付ファイルを削除 With fwMail.Attachments For i = .Count To 1 Step -1 .Remove i Next End With ' 'トリガー送信先アドレスを宛先に設定 fwMail.To = ForwardToAddress ' '[通知のOn/Offのリモート操作] ' '特定の送信者から特定の表題のメールを受信した時にマクロをOn/Offし通知先に通知 ' If strSubject = "通知中断" Then If strSenderEmailAddress = MailStopAddress Then 'バッチファイルを起動 Shell strStopPushFile, 0 '通知の件名を作成 fwMail.Subject = "リモート操作によりPush通知を中断しました。" '本文を空白に fwMail.Body = "" '通知を送信 fwMail.Send Exit Sub Else End If Else End If ' If strSubject = "通知再開" Then If strSenderEmailAddress = MailStopAddress Then 'バッチファイルを起動 Shell strStartPushFile, 0 '通知の件名を作成 fwMail.Subject = "リモート操作によりPush通知を再開しました。" '本文を空白に fwMail.Body = "" '通知を送信 fwMail.Send Exit Sub Else End If Else End If ' '[通知のOn/Off状態の確認] ' strStatus = Dir(strStatusFile) If strStatus = "" Then Exit Sub Else End If ' '[表題と本文を加工して送信] ' '本文から余計な空白と改行コードを削除 strRepBody = Replace(strBody, " ", " ") strRepBody = Replace(strRepBody, vbCrLf, " ") strRepBody = Replace(strRepBody, " ", " ") ' '本文の文字数を制限(デフォルトは100文字) strShortBody = Mid(strRepBody, 1, 100) ' '件名に件名、送信者名、本文を表示 fwMail.Subject = strSubject & " " & strSenderName & " " & strShortBody ' '本文を空白に fwMail.Body = "" ' '通知メールを送信 fwMail.Send ' ErrorTrap: ' End Sub
リモート操作用ファイル
特定の送信者(マクロ内で指定)からの特定の表題(通知中断/通知再開)のリモートメールで通知をOn/Offする際に使います。PC上でバッチファイルをクリックして通知をOn/Offする事も出来ます。
以下の3個のファイルをマクロ内で指定したフォルダ内に保存しておいて下さい。
1) Stop_Pushing.bat
cd/
cd C:\環境に合わせて書き換えてください\IFTTT\
ren Push_is_On_Now.txt Push_is_Off_Now.txt
2) Start_Pushing.bat
cd/
cd C:\環境に合わせて書き換えてください\IFTTT\
ren Push_is_Off_Now.txt Push_is_On_Now.txt
3) Push_is_On_Now.txt
このファイルは中身は空で構いません。
スパムフィルタ用ファイル
以下の2つのテキストファイルをANSI形式で保存してマクロ内で指定したフォルダ内に置いて下さい。1) spamlist.txt
Androidに通知を送る必要のないメールの送信者のメールアドレスを記入します。
送信者名等のメールアドレス以外の記述や改行等が含まれていても問題ありません。
2) keyword.txt
Androidに通知を送る必要のないメールの表題を記入します。
但し、表題の冒頭部分(デフォルトは5文字)しか照会しませんので、注意して下さい。
IFTTT側の設定
IFTTTへのトリガーメールでPushBulletに通知を送るように設定しておきます。
当方の環境下では以下の様に"Message"に"Body"を指定してもPushbulletには本文は送られませんので、必要な情報は全て表題として送信するようにOutlookのマクロ側で加工しています。
通知のOn/Off切り替え用のショートカット
通知のOn/Offをリモート操作で設定するのメール(定型文)は以下のアプリを使って簡単に作成・送信出来るようにしています。
定型文+アプリ起動(定型文メール作成)
判りやすい様にTaskerでアイコンと名称を変更したランチャを作成して使用しています。
Tasker(カスタマイズツール)
0 件のコメント:
コメントを投稿