2020/10/16

Beckyで受信した添付ファイルをフォルダへ自動保存する

仕入先から在庫情報が毎日メールで送られてくるようになった。添付ファイルを毎回特定のフォルダに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 件のコメント:

mobo#3 さんのコメント...

Windowsを再インストールするときにこのスプリプとを消してしまった。が、Google検索でこのページが出てきて歓喜。えらい俺。
だが動かない。
VSCodeで新規作成したテキストはUTF-8。一方wscriptはUTF-16LEじゃないとだめだそうで、文字コードを変えて保存したら動いた。よかった。

色々な画像ファイル形式をhtmlに埋め込む(PHP)

画像をhtmlに埋め込む際、単一の場合は img/src、複数の拡張子を指定すると img/source/srcsetに展開してくれる便利関数。また、単一拡張子のみが指定されている場合は、ブラウザのサポート状況に応じ、avifやwebpの拡張子を持つ同名のファイルがある場合は[a...