仕入先から在庫情報が毎日メールで送られてくるようになった。添付ファイルを毎回特定のフォルダにDnDで保存していたのだが、2週間ほどで面倒くさくなった。
自動で添付ファイルを特定フォルダに保存する方法を模索。最初はPHPとかで特定のメールを受信してとか考えていたけど、今使っているメーラー beckyでできるんじゃないかと、ググる。
beckyのフィルタ内でプログラムを実行する機能があった。引数 %1を渡すと eml形式の一時ファイルを作ってファイル名を渡してくれるそうだ。
では、とemlから添付ファイルを抽出して保存する方法をググる。あった。
emlファイルから添付ファイルを抽出するスクリプト3これをもらって、シンプル化した。
Option Explicit Dim EmlFileName Dim Message, Stm, Attachment Dim SavePath Set Message = CreateObject( "CDO.Message" ) Set Stm = CreateObject( "ADODB.Stream" ) SavePath = "\\server\path\to" For Each EmlFileName In WScript.Arguments ' emlファイルを開く Stm.Open Stm.LoadFromFile EmlFileName Message.DataSource.OpenObject Stm, "_Stream" ' 添付ファイルを保存 For Each Attachment In Message.Attachments Attachment.saveToFile SavePath & "\" & Attachment.FileName Next Stm.Close Next
SavePathが保存場所
これをbeckyで振り分け条件の差出人や件名とフィルタ「プログラムを実行する」と組み合わせる。コマンドラインには
wscript c:\path\to\program.vbs "%1"
と書くと VBScriptが実行できるらしい。
テストするときに手こずったのは、コンテキストメニューにある「選択中のメールを振り分け」でフィルタが実行されると思っていたので、なにを変えても巧く行かなかったこと。フィルタの「プログラムの実行」は受信したタイミングでしか動作しないみたいなので、テストは当該受信メールを「手を加えずに転送」でもう一回自分に送るようにした。
一応満足する結果。でもこれは自分がパソコンを立ち上げないと実行されないわけなので、そのうちPHPなんかでスクリプトを作って、サーバーでcron実行するようにしたい。
1 件のコメント:
Windowsを再インストールするときにこのスプリプとを消してしまった。が、Google検索でこのページが出てきて歓喜。えらい俺。
だが動かない。
VSCodeで新規作成したテキストはUTF-8。一方wscriptはUTF-16LEじゃないとだめだそうで、文字コードを変えて保存したら動いた。よかった。
コメントを投稿