添付ファイルの自動処理と結果の返信No.46979
IOU さん 14/10/30 18:17
 
こんにちは。IOUと申します。

あるアマチュア無線のコンテスト(競技会)の事務局を担当しています。
年に1度のコンテストが終了すると、
メールに添付された、テキスト形式のログ(約1200通)が届きます。
これらのメールに対する、
ログの受付通知と、レポートの返信を自動化できないか思案しています。

そこで、お伺いしたいのですが、

・メールの添付ファイルを所定のフォルダーに保存する。
・添付ファイルのチェック(exe形式のプログラムで処理)する。
・定型文と結果レポート(テキスト形式)を本文に貼り付ける。
・メールを送信者に返信する。

このような作業をマクロなどで、自動化する事は可能でしょうか?
可能でしたら、おおよその手順やサンプルなどをご教示いただけないでしょうか。

秀丸メールは長年愛用させて頂いてますが、マクロの利用や作成の経験はほとんどあ
りません。
よろしくお願いいたします。

[ ]
RE:46979 添付ファイルの自動処理と結果のNo.46980
秀まるお2 さん 14/10/31 09:21
 
> ・メールの添付ファイルを所定のフォルダーに保存する。

 今現在選択してるメールの添付ファイルすべてを、例えば"e:\temp"って
フォルダに保存する例としては、例えばこんなマクロになります。

    loaddll "tkinfo.dll";
    #count = dllfunc("CountCurrentHeader", "X-Attach");
    #i = 0;
    while( #i < #count ) {
        $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
        $basename = midstr( $attach, strrstr($attach,"\\") + 1 );
        $src = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount") + "\\"
            + $attach;
        $dest = "e:\\temp\\" + $basename;
        #n = dllfunc("Bypass_CopyFile", $src, $dest, 0);
        if( #n == 0 ) {
            message "コピーファイル失敗。\n" +
                    "コピー元: " + $src + "\n" +
                    "コピー先: " + $dest;
        }
        #i = #i + 1;
    }


 添付ファイルが1個だけって決まってるならもっと簡単になります。

> ・添付ファイルのチェック(exe形式のプログラムで処理)する。

 例えば先ほどの例だと、$destって変数にコピー先のファイル名が入ってるの
で、

   runsync2 "\"c:\\program files\\test program\\test.exe\" \"" + $dest + "\"";

 みたいな文を入れたらいいんじゃないかと思います。

> ・定型文と結果レポート(テキスト形式)を本文に貼り付ける。

 定型文は、マクロで書いてもいいしテンプレートで指定してもいいですが、結
果レポートは、例えば"e:\temp\result.txt"ってファイルにあるのだとしたら、

    insertfile "e:\\temp\\result.txt";

 みたいにinsetfile文でカーソル位置に取り込めばいいんじゃないかと思いま
す。

 あるいは、もしもrunsync2で起動するプログラムの標準出力を取得してってこ
となら、runsync2の代わりにrunex文を使って標準出力をメールに取り込むやり
方になると思います。

> ・メールを送信者に返信する。

 MakeReplyかMakeReplyCustomで返信メールが作成できます。返信メールを作成
して送信までするとしたら、SendLaterしてexitする作戦になるかと思います。

> 可能でしたら、おおよその手順やサンプルなどをご教示いただけないでしょうか。

 runsync2はしてませんけど、例えばこんなサンプルとか…

    loaddll "tkinfo.dll";
    #count = dllfunc("CountCurrentHeader", "X-Attach");
    #i = 0;
    #attachcount = 0;

    while( #i < #count ) {
        $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
        $basename = midstr( $attach, strrstr($attach,"\\") + 1 );
        $src = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount") + "\\"
            + $attach;
        $dest = "e:\\temp\\" + $basename;
        #n = dllfunc("Bypass_CopyFile", $src, $dest, 0);
        #i = #i + 1;
        $attachlist[#attachcount] = $basename;
        #attachcount = #attachcount + 1;
    }
    #n = dllfunc("MakeReply");
    gofiletop;
    beginsel;
    gofileend;
    insert " 返信メールの例です。\n\n";
    #i = 0;
    while( #i < #attachcount ) {
        insert "添付ファイル: " + $attachlist[#i] + "\n";
        #i = #i + 1;
    }
    insert "\n\n e:\\temp\\result.txtの貼り付け:\n";
    insertfile "e:\\temp\\result.txt";

    //宛先指定
    #n = dllfunc("SetHeader", "To", "hideo@maruo.co.jp");

    //あとで送信して終了
    #n = dllfunc("SendLater");
    if( #n != 0 ) {
        exit;
    }
    endmacro;

 マクロの動作が不明な点があれば、所々にmessage文を入れて変数の内容とか
をチェックして確認するのがお勧めです。例えば

        $dest = "e:\\temp\\" + $basename;
        message "$src = " + $src + "\n$dest = " + $dest;

 とかいう感じで変数の中身を確認するとか。

[ ]
RE:46980 添付ファイルの自動処理と結果のNo.46983
IOU さん 14/11/01 09:38
 
秀まるお2 様

ご教示ありがとうございます。
マクロで対応できるようで、目標が具体的になりました。
今年の受付が終わりましたので、来年の10月に向けてトライします。

疑問点などについては、改めお尋ねしたいと思います。

今後ともよろしくお願いいたします。


[ ]