受信メールの添付ファイルのみを自動保存No.08294
haiji さん 21/06/24 21:34
 
仕事の業務にて受注管理をしています

毎日メールにて添付ファイルをフォルダに保存していますが、以前利用していたoutl
ookでは、VBAマクロにて受信と同時に決まったフォルダに添付ファイルを自動保存し
ていました。

先月より秀丸メールに切り替え、自動保存できるマクロを利用しフォルダに添付ファ
イルは保存されますが、フォルダ内にフォルダが形成されその中に添付ファイルが保
存されています。
outlookのマクロでは、保存フォルダに添付ファイルのみ保存され至ってシンプルな
ものでしたが、現在のマクロではフォルダ内にフォルダ、そのフォルダにファイルが
あるという状況です。

こちらの希望としましては、メールを自動起動し添付ファイルは固定のフォルダに、
そしてその中にはシンプルに添付ファイルが保存される(フォルダなし)ようにした
いです。

ちなみに 現在 秀まるお2さんのマクロを利用させていただいておりますが動作は問
題ありません。

宜しくお願い申し上げます。

[ ]
RE:08294 受信メールの添付ファイルのみをNo.08296
秀まるお2 さん 21/06/25 10:29
 
 僕の作った添付ファイル自動保存マクロというのがいくつかバージョンがあるみた
いなのですが、以下のマクロであれば、サブフォルダに分けずに1つのフォルダに全
部まとめて保存します。

 1行目の所だけ直せば使えると思います。

 あるいは、以前利用されてるマクロをベースに動作を変えたい場合なら、そのマク
ロをここの会議室に書き込んでいただければ、それを改変してお返事することは出来
ると思います。


-------------------------------------------------------------------------------
    $destfolder = "e:\\temp\\test";     //保存先フォルダをここで指定する
    loaddll "tkinfo.dll";
    $prevaccount = dllfuncstr("CurrentAccount");
    $prevfolder = dllfuncstr("CurrentFolder");
    while( dllfunc( "SelectRecvMail" ) ) {
        #count = dllfunc("CountCurrentHeader", "X-Attach");
        if( #count > 0 ) {
            #i = 0;
            while( #i < #count ) {
                $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                if( dllfuncstr("ToLower", rightstr($attach,4)) == ".p7s" ) {
                    //スキップ
                } else {
                    $src = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccoun
t") + "\\" + $attach;
                    $basename = midstr( $attach, strrstr($attach, "\\") + 1 );
                    $dest = $destfolder + "\\" + $basename;
                    #n = dllfunc("Bypass_CopyFile", $src, $dest, 0 );
                    #n = dllfunc("Bypass_SetFileAttributes", $dest, 0x20 );
                }
                #i = #i + 1;
            }
        }
        if( ! dllfunc("IsUnread") ) {
            #n = dllfunc("SwitchUnread");
        }
    }
    #n = dllfunc("SelectFolder", $prevaccount, $prevfolder);

[ ]
RE:08296 受信メールの添付ファイルのみをNo.08297
haiji さん 21/06/25 13:30
 
この度は ご連絡いただきありがとうございます。

現在使用させていただいてるマクロは、

$dest = "c:\test";
    loaddll "tkinfo.dll";
    while( dllfunc( "SelectRecvMail" ) ) {
        $attach = dllfuncstr("CurrentHeader", "X-Attach");
        if( $attach != "" ) {
            $src = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount")
                 + "\\" + $attach;
            // フォルダ名のみに変換する。
            #xFolder = -1;
            #xFile = -1;
            while(1) {
                #x = strstr( midstr( $src, #xFile + 1, 256 ), "\\" );
                if( #x < 0 ) {
                    break;
                }
                #x = #x + #xFile + 1;
                #xFolder = #xFile;
                #xFile = #x;
            }
            $src = leftstr( $src, #xFile );
            $command = "xcopy.exe \"" + $src + "\" \""
                      + $dest + "\\" + midstr( $src, #xFolder + 1, 256 )
                       + "\" /S /I";
            runsync2 $command;
        }
    }

上記のマクロを使用しております。
指定のフォルダには保存できていますが、フォルダ内(c:\test)にフォルダ、そし
てそのフォルダ中に添付ファイルがあるような感じになってます。

もし何かわかれば助かります
お忙しいところ恐縮ですがよろしくお願いいたします。

[ ]
RE:08297 受信メールの添付ファイルのみをNo.08298
秀まるお2 さん 21/06/25 17:20
 
 そのマクロは、たぶん秀丸メールがだいぶ前の時の、Bypass_CopyFileとかの関数
が用意されてなかった時代の物だと思います。

 08296番発言に書いたマクロで大丈夫なはずだと思います。それでどうでしょうか。
1行目だけ直せばそのまま使えると思います。

 同じ名前の添付ファイルがあると、古い方が上書きされてしまいますけども。

[ ]
RE:08298 受信メールの添付ファイルのみをNo.08299
haiji さん 21/06/25 18:07
 
度々のご連絡、ありがとうございます。

先程のマクロを使用しまして、上手くファイルが保存されました。
本当にありがとうございました。


> 同じ名前の添付ファイルがあると、古い方が上書きされてしまいますけども。

どうしても作業上、同一ファイルがメールにて受信されることがあります。これを回
避することは可能でしょうか?

[ ]
RE:08299 受信メールの添付ファイルのみをNo.08300
秀まるお2 さん 21/06/25 18:16
 
 同一ファイルになった時にファイル名を変更するようにマクロを直すのなら出来ま
す。

 例えばsample.txtファイルが既にあったら、同じ名前のファイルは

   sample(2).txt

 みたいにカッコ付きで番号を振るとか。

 あるいは、そもそも的に名前が重なるのを回避するために、ファイル名にDate:ヘ
ッダの日付を入れて保存するようにマクロを直すとかも可能です。

   2021-06-25-sample.txt

 みたいに保存するようにすれば、古いメールの同名添付ファイルとは重ならないよ
うには出来ます。

 何かこの辺のご希望があれば、そのように修正してみたい所です。

[ ]
RE:08300 受信メールの添付ファイルのみをNo.08301
haiji さん 21/06/25 22:18
 
> 例えばsample.txtファイルが既にあったら、同じ名前のファイルは
>
>   sample(2).txt
>
> みたいにカッコ付きで番号を振るとか。

以前、outlookのマクロの場合、〜〜〜(2)でした
そのようになる仕様が望ましいと思っております
お手数ですがよろしくお願いいたします。


あと、不可能かと思うのが承知で質問ですが。
秀丸メールを使う目的として、現在の仕事の重要ポイントとしまして
お願いしています添付ファイルの自動保存の他に、開封確認機能があることで秀丸
メールを使うこととなりました。
outlookも同機能がございますが、2016バージョンより開封確認が相手先に飛ばない
ようになってしまいました(null扱いで)。
秀丸メールは開封確認機能がありますが、一つ問題がありまして。
開封確認用のテンプレートを用意し返信していますが、相手先によって
返信の内容が異なって送られてしまいます。
秀まるお2様に質問することではないかと思いますが、何かわかればと思い質問して
みました。
勝手な質問で大変申し訳なく思っておりますが、不明であれば無視してください。す
みません。



[ ]
RE:08301 受信メールの添付ファイルのみをNo.08304
秀まるお2 さん 21/06/28 09:43
 
 テスト (2).txt

 みたいに半角空白1つ入れてカッコ付きで数字を入れるようにしてみました。

------------------------------------------------------------------------------
    $destfolder = "e:\\temp\\test";
    loaddll "tkinfo.dll";
    $prevaccount = dllfuncstr("CurrentAccount");
    $prevfolder = dllfuncstr("CurrentFolder");
    while( dllfunc( "SelectRecvMail" ) ) {
        #count = dllfunc("CountCurrentHeader", "X-Attach");
        if( #count > 0 ) {
            #i = 0;
            while( #i < #count ) {
                $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                if( dllfuncstr("ToLower", rightstr($attach,4)) == ".p7s" ) {
                    //スキップ
                } else {
                    $src = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccoun
t") + "\\" + $attach;
                    $basename = midstr( $attach, strrstr($attach, "\\") + 1 );
                    $dest = $destfolder + "\\" + $basename;
                    if( existfile($dest) ) {
                        #ext = strrstr( $dest, "." );
                        if( #ext > 0 ) {
                            $destbase = leftstr( $dest, #ext );
                            $destext = midstr( $dest, #ext );
                        } else {
                            $destbase = $dest;
                            $destext = "";
                        }
                        #destnum = 2;
                        while( #destnum < 1000 ) {
                            $dest = $destbase + " (" + str(#destnum) + ")" +
 $destext;
                            if( ! existfile($dest) ) {
                                break;
                            }
                            #destnum = #destnum + 1;
                        }
                    }
                    #n = dllfunc("Bypass_CopyFile", $src, $dest, 0 );
                    #n = dllfunc("Bypass_SetFileAttributes", $dest, 0x20 );
                }
                #i = #i + 1;
            }
        }
        if( ! dllfunc("IsUnread") ) {
            #n = dllfunc("SwitchUnread");
        }
    }
    #n = dllfunc("SelectFolder", $prevaccount, $prevfolder);

[ ]
RE:08304 受信メールの添付ファイルのみをNo.08305
haiji さん 21/06/28 10:33
 
> テスト (2).txt
>
> みたいに半角空白1つ入れてカッコ付きで数字を入れるようにしてみました。

この度はお手数おかけしました。

テストしまして 問題なく 同ファイルにて(2)も付きました。

本当にありがとうございました。

[ ]