そのまま転送時に添付ファイルを圧縮No.44801
rn さん 13/08/13 18:44
 
秀まるお様

いつも秀丸メールを使わせていただいています

実現方法について教えていただけると助かります

現在、外出時のメール確認およびバックアップの目的で定期受信時に
受信メールを「そのまま転送」機能を使用して、WEBメールに転送を
しています(一旦、未送信フォルダにいれて次回の定期受信で送信しています)

<やりたいこと>
そのまま転送時に、添付ファイルを圧縮して送信したい

【添付ファイル圧縮 by 7zip さらに改良版】マクロを、自動起動・
送受信時の開始直前に登録し実行してみたのですが、選択メールのみ
の実行であったり、ダイアログが表示されてしまい定期受信時での
自動転送ができません

マクロでなくても実現方法をご教授いただけるよう
よろしくお願いします

[ ]
RE:44801 そのまま転送時に添付ファイルをNo.44802
秀まるお2 さん 13/08/14 18:41
 
 やるとしたら、未送信フォルダにたまったメールを片っ端から添付ファイル圧
縮するようなマクロを別途作成すればいいかと思います。

 マクロの内容は…

 ちょっと考えますのでしばらくお待ちください。

[ ]
RE:44802 そのまま転送時に添付ファイルをNo.44803
秀まるお2 さん 13/08/14 19:18
 
 マクロの内容は以下のようになりました。これでどうでしょうか。

 このマクロを、「マクロ・マクロ登録・自動起動」の「受信が一段落した時」また
は「送受信の開始直前」の所に登録しておけばいいかと思います。または既に何か登
録されてる場合は、そのマクロからexecmacroを使ってこっちのマクロも起動するよ
うにしたらいいかと思います。

 マクロの中の「$account = "....";」の部分はご自身のアカウントに書き換える必
要があります。

 7zipがインストールされてなかったり、何かエラーが起きた場合はそこで止まって
しまうので、完全な無人運転をさせるならもっと改良が必要になります。



// 添付ファイル圧縮-7zip-Unsent-All.mac
// 2013.08.14
// 7-zipのダウンロード先:  http://sevenzip.sourceforge.jp/

    $account = "斉藤秀夫メイン";

    loaddll "tkinfo.dll";
    $7zip = "C:\\Program files\\7-Zip\\7z.exe";
    if( ! existfile( $7zip ) ) {
        $7zip = "C:\\Program files (x86)\\7-Zip\\7z.exe";
        if( ! existfile( $7zip ) ) {
            message "7-Zipのプログラム用ファイルが見つかりません。7-Zipをイ
ンストールしてください。\n\n" +
                    "7-Zipは、C:\\Program files\\7-Zip またはC:\\Program fil
es (x86)\\7-Zip にインストールされてる必要があります。";
            endmacro;
        }
    }
    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    $home = getregstr( "HomeDir" );
    closereg;

    if( dllfunc("GetFolderMailCount", $account, "未送信") == 0 ) {
        endmacro;
    }

    $PrevAccount = dllfuncstr("CurrentAccount");
    $PrevFolder = dllfuncstr("CurrentFolder");

    #n = dllfunc("SelectFolder", $account, "未送信");
    if( dllfunc("IsThreadView") != 0 ) {
        #n = dllfunc("SetThreadView", 0);
    }
    if( dllfunc("ViewArea") != 0 ) {
        #n = dllfunc("SetViewArea", 0);
    }
    #MailIndex = 0;
    #MailCount = dllfunc("MailCount");
    while( #MailIndex < #MailCount ) {
        #n = dllfunc("SetMailIndex", #MailIndex);
        #attachcount = dllfunc("CountCurrentHeader", "X-Attach");
        if( #attachcount != 0 ) {
            if( #attachcount == 1
             && dllfuncstr("ToLower", rightstr( dllfuncstr("CurrentHeader",
"X-Attach"), 4 ) ) == ".zip" ) {
                //スキップ
            } else {
                #n = dllfunc("BeginEditMail");
                #WantSave = 1;
                #i = 0;

                //2006.4.14 複数ファイルをまとめて1つにするバージョン
                $attach = dllfuncstr("CurrentHeader", "X-Attach");
                $path = $home + $account + "\\" + $attach;
                if( #attachcount == 1 ) {
                    $lzh = $attach + ".zip";
                    $pathLzh = $path + ".zip";
                } else {
                    $lzh = $attach + "など.zip";
                    $pathLzh = $path + "など.zip";
                }
                //添付ファイル圧縮-7zip.macで修正。
                //$cmd = "-j \"" + $pathLzh + "\"";
                $cmd = "a \"" + $pathLzh + "\"";
                while(1) {
                    $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                    if( $attach == "" ) {
                        break;
                    }
                    $path[#i] = $home + $account + "\\" + $attach;
                    $cmd = $cmd + " \"" + $path[#i] + "\"";
                    #i = #i + 1;
                    #count = #i;
                }

                //添付ファイル圧縮-7zip.macで修正。
                //#n = dllfunc("Zip", hidemaruhandle(0), $cmd);
                runsync2 $7zip + " " + $cmd;
                if( !result ) {
                    message "7zipの実行に失敗しました。マクロを中断します。";
                    endmacro;
                }
                if( ! existfile( $pathLzh ) ) {
                    message "Zip圧縮に失敗しました。(圧縮によって生成された
はずのファイルがありません。)";
                    #WantSave = 0;
                } else {
                    #n = dllfunc("Bypass_SetFileAttributes", $pathLzh, 0x000
00021);     //ReadOnly属性に設定。
                    #i = 0;
                    while( #i < #count ) {
                        #n = dllfunc("Bypass_SetFileAttributes", $path[#i],
0x00000020);        // ReadOnlyを解除。
                        #n = dllfunc("Bypass_DeleteFile", $path[#i]);
                        #i = #i + 1;
                    }
                    while( #i > 0 ) {
                        #i = #i - 1;
                        #n = dllfunc("DeleteHeader2", "X-Attach", #i);
                    }
                    #n = dllfunc("SetHeader", "X-Attach", $lzh);
                }
                if( #WantSave ) {
                    #n = dllfunc("SaveEditMail", 0);
                } else {
                    #n = dllfunc("CancelEditMail");
                }
            }
        }
        #MailIndex = #MailIndex + 1;
    }
    #n = dllfunc("SelectFolder", $PrevAccount, $PrevFolder);
    endmacro;

[ ]
RE:44803 そのまま転送時に添付ファイルをNo.44804
秀まるお2 さん 13/08/14 22:15
 
>  このマクロを、「マクロ・マクロ登録・自動起動」の「受信が一段落した時」また
> は「送受信の開始直前」の所に登録しておけばいいかと思います。

 「送受信の開始直前」だと、エディタ・ウィンドウ上で「今すぐ送信」とした
時にもマクロが実行されてエラーになってしまうようでした。もしそこに登録し
て使うとしたら、

   loaddll "tkinfo.dll";


 の後に、

    if( ! dllfunc("IsHidemaruMailMain") ) {
        endmacro;
    }

 のような文を入れればいいかと思います。

[ ]
RE:44803 そのまま転送時に添付ファイルをNo.44805
rn さん 13/08/15 13:51
 
秀まるお2様

早速の対応ありがとうございました

出来ました!

作成いただいたマクロを「受信が一段落した時」に登録し確認した
ところ無事、圧縮されました

ありがとうございました



欲を言えばなのですが、
<1>
”複数ファイルをまとめて1つにするバージョン”のほかに
No:44503にあります”1ファイル1圧縮”は可能でしょうか

No:44505のマクロのどの部分を今回作成いただいたマクロの
どこと書き替えればいいのかよくわかりませんでした
(初心者な質問で申し訳ありません)

<2>
>やるとしたら、未送信フォルダにたまったメールを片っ端から
>添付ファイル圧縮するようなマクロ

片っ端からでなく、そのまま転送のメールだけの添付ファイルを
圧縮することはできないでしょうか
”Resent-From”が指定されている場合のみなどで選別は
できないでしょうか

以上 可能であればよろしくお願いします

[ ]
RE:44805 そのまま転送時に添付ファイルをNo.44808
秀まるお2 さん 13/08/16 17:28
 
> 欲を言えばなのですが、

 マクロを改良すれば出来ると思いますが、テストとかも含めると時間がかかる
ので…。少々お待ちください。

[ ]
RE:44808 そのまま転送時に添付ファイルをNo.44811
秀まるお2 さん 13/08/19 14:19
 
 一応できました。「そのまま転送」で転送する用のメールのみを対象として、1つ
1つの添付ファイルをそれぞれzipにします。

 ファイルサイズが小さい物も含めて全部zipにします。


// 添付ファイル圧縮-7zip-Unsent-Separate.mac
// 2013.08.19
// 7-zipのダウンロード先:  http://sevenzip.sourceforge.jp/

    $account = "ご自身のアカウント名";    //!!!書き換えが必要です!!!

    loaddll "tkinfo.dll";
    if( ! dllfunc("IsHidemaruMailMain") ) {
        endmacro;
    }
    $7zip = "C:\\Program files\\7-Zip\\7z.exe";
    if( ! existfile( $7zip ) ) {
        $7zip = "C:\\Program files (x86)\\7-Zip\\7z.exe";
        if( ! existfile( $7zip ) ) {
            message "7-Zipのプログラム用ファイルが見つかりません。7-Zipをイ
ンストールしてください。\n\n" +
                    "7-Zipは、C:\\Program files\\7-Zip またはC:\\Program fil
es (x86)\\7-Zip にインストールされてる必要があります。";
            endmacro;
        }
    }
    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    $home = getregstr( "HomeDir" );
    closereg;

    if( dllfunc("GetFolderMailCount", $account, "未送信") == 0 ) {
        endmacro;
    }

    $PrevAccount = dllfuncstr("CurrentAccount");
    $PrevFolder = dllfuncstr("CurrentFolder");

    #n = dllfunc("SelectFolder", $account, "未送信");
    if( dllfunc("IsThreadView") != 0 ) {
        #n = dllfunc("SetThreadView", 0);
    }
    if( dllfunc("ViewArea") != 0 ) {
        #n = dllfunc("SetViewArea", 0);
    }
    #MailIndex = 0;
    #MailCount = dllfunc("MailCount");
    while( #MailIndex < #MailCount ) {
        #n = dllfunc("SetMailIndex", #MailIndex);
        if( dllfuncstr("CurrentHeader", "Resent-From") != "" ) {
            // 「そのまま転送」で転送するメールのみ添付ファイル圧縮する。
            #attachcount = dllfunc("CountCurrentHeader", "X-Attach");
            if( #attachcount != 0 ) {
                #Update = 0;
                #i = 0;
                while(1) {
                    $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                    if( $attach == "" ) {
                        break;
                    }
                    $ext = dllfuncstr("ToLower", rightstr( $attach, 4 ));
                    if( $ext == ".lzh" || $ext == ".zip"
                     || $ext == ".pdf"
                     || $ext == ".gif"
                     || $ext == ".jpg"
                     || $ext == ".png"
                     || $ext == ".bin"
                     || rightstr($attach, 26) == "\\application_pgp-signature"
                     || rightstr($attach, 26) == "\\application_pgp-encrypted"
                     || rightstr($attach, 25) == "\\application_octet-stream"
                            ) {
                        // 圧縮しても効果がないので圧縮しない
                        // PGP関係の添付ファイルも圧縮しない
                    } else {
                        $path = $home + $account + "\\" + $attach;

                        $pathLzh = $path + ".zip";
                        $cmd = "a \"" + $pathLzh + "\" \"" + $path + "\"";
                        runsync2 $7zip + " " + $cmd;
                        if( ! existfile( $pathLzh ) ) {
                            message "Zip圧縮に失敗したようです。スキップしま
す。";
                        } else {
                            if( #Update == 0 ) {
                                #Update = 1;
                                #n = dllfunc("BeginEditMail");
                            }
                            #n = dllfunc("Bypass_SetFileAttributes", $pathLz
h, 0x00000021);     //ReadOnly属性に設定。
                            #n = dllfunc("Bypass_SetFileAttributes", $path,
0x00000020);        // ReadOnlyを解除。
                            #n = dllfunc("Bypass_DeleteFile", $path);
                            if( #n == 0 ) {
                                message $path + " の削除に失敗しましたが処理
を続行します。";
                            }
                            #n = dllfunc("SetHeader2", "X-Attach", $attach +
 ".zip", #i);
                        }
                    }
                    #i = #i + 1;
                }
                if( #Update ) {
                    #n = dllfunc("SaveEditMail", 0);
                }
            }
        }
        #MailIndex = #MailIndex + 1;
    }
    #n = dllfunc("SelectFolder", $PrevAccount, $PrevFolder);
    endmacro;


[ ]
RE:44808 そのまま転送時に添付ファイルをNo.44828
rn さん 13/08/21 11:56
 
>ので…。少々お待ちください。

なぜか「No44811」のコメントが表示されないので
こちらからコメントさせていただきます

「No44811」で作成いただいたマクロを丸1日運用しましたが
問題なく動いております

個々の添付ファイル名の確認とバックアップ先のディスク圧縮
ができました

ありがとうございました

[ ]