【添付ファイル圧縮-7zip.mac】添付ファイNo.44503
ZZPOP さん 13/05/28 11:25
 


お世話になります。


【添付ファイル圧縮-7zip.mac】の添付ファイル圧縮マクロの機能で

★現在の仕様は

 複数ファイル= 1zipファイルに圧縮ですが、

   0001.jpg
   aaaa.txt
   bbbb.txt
   cccc.xls  →『 0001.jpgなど.zip 』
   dddc.pdf
   -----------
   fff.zip   → fff.zip そのまま

★希望の仕様は
 添付ファイルを後から検索したいときに
 元ファイル名でヒットしなくなるため

 → 添付ファイル = 個別でzip圧縮 

   0001.jpg  →『 0001.jpg.zip 』
   aaaa.txt  →『 aaaa.txt.zip 』
   bbbb.txt  →『 bbbb.txt.zip 』
   cccc.xls  →『 cccc.xls.zip 』
   dddd.pdf  →『 dddd.pdf.zip 』
   -----------
   fff.zip   → fff.zip そのまま


      となる機能が欲しいです


ご検討よろしくお願いいたします

[ ]
RE:44503 【添付ファイル圧縮-7zip.mac】No.44505
秀まるお2 さん 13/05/28 16:55
 
 マクロ作ってみました。これでどうでしょうか。

 一応、送信系メールと受信系メールの両方でテストはしました。
 jpg、png、zip、lzhなど、圧縮しても意味のない(ファイルサイズが小さくならな
い)物は除外するようにしました。

------------------------------------------------------------

// 添付ファイル圧縮-7zip-Separate.mac by 斉藤秀夫
// 2013.05.28
// 7-zipのダウンロード先:  http://sevenzip.sourceforge.jp/


    //パスワード付きにする場合はここにパスワードを設定しておく。
    //パスワード無しにするなら""を代入する。
    //パスワードを毎回入力したい場合は $password = "*"としておく。
    //パスワードの中には空白は入れないでください。
    //
    // 例:
    //  $password = "";         ... パスワード無し
    //  $password = "pass";     ... パスワードを"pass"にする。
    //  $password = "*";        ... パスワードを毎回入力する。
    $password = "*";

    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;
    $account = dllfuncstr("CurrentAccount");
    if( dllfunc("IsTuruKameMain") ) {
        question "現在選択しているメール(複数も可)の添付ファイルを圧縮しま
す。よろしいですか?";
        if( result == yes ) goto CompressAll;
        endmacro;
    }

    if( dllfunc("MailType") == 3 ) {
        message "受信したメールの添付ファイル・圧縮は、秀丸メール本体上でし
か実行できません。";
        endmacro;
    }
    if( readonly ) {
        #n = dllfunc("EnableEdit");
    }
    #cAttach = dllfunc("CountCurrentHeader", "X-Attach");
    if( #cAttach == 0 ) {
        message "添付ファイルは1つもありません。";
        endmacro;
    }

    if( $password == "*" ) {
        $password = input( "パスワードは?" );
        if( $password == "" ) {
            question "パスワード無しにしますか?";
            if( result != yes ) {
                endmacro;
            }
        }
    }
    if( $password != "" ) {
        $7zip = $7zip + " -p" + $password;
    }

    #i = 0;
    #cNewAttach = 0;
    while( #i < #cAttach ) {
        $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i );
        if( $attach == "" ) break;
        $ext = dllfuncstr("ToLower", rightstr( $attach, 4 ));
        if( $ext == ".zip" || $ext == ".lzh"
         || $ext == ".pdf"
         || $ext == ".gif"
         || $ext == ".jpg"
         || $ext == ".png"
         || $ext == ".bin"
          ) {
            #i = #i + 1;
            continue;
        }
        $dest = $attach + ".zip";
        while(1) {
            #n = strstr( $dest, "\\" );
            if( #n < 0 ) {
                break;
            }
            $dest = midstr( $dest, #n + 1, 256 );
        }
        $tmp = getenv("temp");
        if( $tmp == "" ) {
            $tmp = getenv("tmp");
        }
        if( rightstr($tmp, 1) != "\\" ) {
            $tmp = $tmp + "\\";
        }
        $dest = $tmp + $dest;
        #n = dllfunc("Bypass_SetFileAttributes", $dest, 0x00000020);
        #n = dllfunc("Bypass_DeleteFile", $dest);
        $cmd = "a \"" + $dest + "\" \"" + $home + $account + "\\" + $attach
+ "\"";
        runsync2 $7zip + " " + $cmd;
        if( !result ) {
            message "7zipの実行に失敗しました。";
            endmacro;
        }
        #n = dllfunc( "AddAttach", $dest );
        #n = dllfunc("Bypass_DeleteFile", $dest);

        #aiNewAttach[#cNewAttach] = #i;
        #cNewAttach = #cNewAttach + 1;

        #i = #i + 1;
    }
    if( #cNewAttach == 0 ) {
        message "圧縮した添付ファイルはありませんでした。";
    } else {
        #i = #cNewAttach;
        while( #i > 0 ) {
            #i = #i - 1;
            $attach = dllfuncstr("CurrentHeader2", "X-Attach", #aiNewAttach
[#i] );
            #n = dllfunc( "UndoAttach", $attach );
        }
    }
    endmacro;



// 受信したメールの添付ファイルを圧縮する処理。
CompressAll:
    #n = dllfunc("LockSelection");
    #cCompressed = 0;
    #cCompressedMail = 0;
    while( dllfunc("EnumSelection", 1) != 0 ) {
        #attachcount = dllfunc("CountCurrentHeader", "X-Attach");
        if( #attachcount != 0 ) {
            #Update = 0;
            #n = dllfunc("BeginEditMail");
            #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;
                    if( dllfunc("Bypass_GetFileSize", $path) >= 256 ) {
                        // 256バイト以上のファイルなら圧縮する。
                        $pathLzh = $path + ".zip";
                        $cmd = "a \"" + $pathLzh + "\" \"" + $path + "\"";
                        runsync2 $7zip + " " + $cmd;
                        if( ! existfile( $pathLzh ) ) {
                            message "Zip圧縮に失敗したようです。スキップしま
す。";
                        } else {
                            if( #Update == 0 ) {
                                #Update = 1;
                                #n = dllfunc("BeginEditMail");
                                #cCompressedMail = #cCompressedMail + 1;
                            }
                            #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);
                            #cCompressed = #cCompressed + 1;
                        }
                    }
                }
                #i = #i + 1;
            }
            if( #Update ) {
                #n = dllfunc("SaveEditMail", 0);
            }
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    if( #cCompressedMail == 0 ) {
        message "圧縮した添付ファイルはありませんでした。";
    } else {
        message str(#cCompressedMail) + "通のメールの、 " + str(#cCompresse
d) + "個の添付ファイルを圧縮しました。";
    }
    endmacro;


[ ]
RE:44505 【添付ファイル圧縮-7zip.mac】No.44506
秀まるお2 さん 13/05/28 17:10
 
 以下のURLからもダウンロード出来ます。

http://hide.maruo.co.jp/software/bin3/attachcompress-7zip-separate.mac.zip

 うまく動くのを確認いただけたら、うちのライブラリに、このマクロも含めた
形で7zip圧縮マクロをアップロードしなおそうと思います。

[ ]
RE:44505 【添付ファイル圧縮-7zip.mac】No.44508
ZZPOP さん 13/05/28 17:23
 
秀まるお2様

毎回迅速な対応いただき感謝致します、

個別圧縮出来ました
本当に有難うございます。

テストで1234の固定パスワード設定してみました
パスワードが設定されないようです

=======================================================
// 添付ファイル圧縮-7zip-Separate.mac by 斉藤秀夫
// 2013.05.28
// 7-zipのダウンロード先:  http://sevenzip.sourceforge.jp/


    //パスワード付きにする場合はここにパスワードを設定しておく。
    //パスワード無しにするなら""を代入する。
    //パスワードを毎回入力したい場合は $password = "*"としておく。
    //パスワードの中には空白は入れないでください。
    //
    // 例:
    //  $password = "";         ... パスワード無し
    //  $password = "pass";     ... パスワードを"pass"にする。
    //  $password = "*";        ... パスワードを毎回入力する。
    $password = "1234";




> マクロ作ってみました。これでどうでしょうか。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>

[ ]
RE:44506 【添付ファイル圧縮-7zip.mac】No.44509
ZZPOP さん 13/05/28 17:31
 
秀まるお2様

個別圧縮出来ましたが

こちらも

パスワードが設定を入れてもパスワードがかからないようです
※テストで1234の固定パスワード設定してみました



> 以下のURLからもダウンロード出来ます。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>形で7zip圧縮マクロをアップロードしなおそうと思います。

[ ]
RE:44509 【添付ファイル圧縮-7zip.mac】No.44510
ZZPOP さん 13/05/28 17:40
 
秀まるお2様


大量にメールを選択して、このマクロを実行を途中でマクロ停止した際
フォルダ内のメール選択がCtrl+Aで全選択出来ない状況に
陥ります。


復旧対処:メーラー再起動して復旧します。


素人判断ですが、
秀丸メーラーのメモリー管理関係でなんらかの保持が起きているのでしょうか

※すべてフォルダー内をマクロがRUNしたときは、
フォルダ内のメール選択(Ctrl+A)は全選択可能で問題ありません。

[ ]
RE:44510 【添付ファイル圧縮-7zip.mac】No.44513
秀まるお2 さん 13/05/28 19:01
 
 パスワード設定が無視されてしまう件ですが、受信系メールの添付ファイルを
圧縮する時に関しては、意図してパスワードは設定しないようにしています。

 送信系メールの場合はパスワードが効くと思います。

 受信したメールの添付ファイル圧縮でもパスワードが効くようにってニーズは
無いと思ったので、あえてそのようにしています。一応、ニーズがあれば直すこ
とは出来ます。

 それと、もう1点の、マクロを中断した後「すべて選択」が効かない件ですが、
これは、実は秀丸メール側の問題となります。マクロでLockSelectionして、そ
のままマクロを中断するとロックされたままになってしまいまして、それでおか
しくなるようです。

 昔からバグってたんだと思います。

 なんとか、次のβ版(V6.14β2)で直せるように、トライしてみます。

[ ]
RE:44513 【添付ファイル圧縮-7zip.mac】No.44516
秀まるお2 さん 13/05/29 08:38
 
 追加ですみません。

>  パスワード設定が無視されてしまう件ですが、受信系メールの添付ファイルを
> 圧縮する時に関しては、意図してパスワードは設定しないようにしています。

 これについてはマクロの中にもどこにな書いて無いので、ちゃんとマクロの中
のコメントおよびライブラリの補足説明に追加記述させていただきます。

[ ]
RE:44516 【添付ファイル圧縮-7zip.mac】No.44521
ZZPOP さん 13/05/30 07:30
 
マクロの中のコメント補足有難うございます。

送信の個別パスワード付圧縮の確認も出来ました。
受信系のパスワードはたしかに無くてもいいのですが
送られてきたパスワード無し無圧縮添付ファイルのセキュリティ向上のため
と思いました。がしかし、たしかにニーズがなければ現仕様で問題ありません。

毎回毎回、本当に迅速な改版サポートに心から感謝申し上げます。
この速さで対応出来るのほかのソフトメーカーを見たことありません!!
前回、今回と心から尊敬いたしました。
これからも秀丸メールを末永く使わせて頂きます。
本当に本当にありがとうございました。



> 追加ですみません。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>のコメントおよびライブラリの補足説明に追加記述させていただきます。

[ ]
RE:44521 【添付ファイル圧縮-7zip.mac】No.44522
秀まるお2 さん 13/05/30 08:50
 
 受信系メールにもパスワードを設定するようにマクロを改造するとしたら、

CompressAll:

 の直後に、

    if( $password == "*" ) {
        $password = input( "パスワードは?" );
        if( $password == "" ) {
            question "パスワード無しにしますか?";
            if( result != yes ) {
                endmacro;
            }
        }
    }
    if( $password != "" ) {
        $7zip = $7zip + " -p" + $password;
    }

 の処理を入れてやればいいです。必要でしたらそのように改造して使っていた
だけたらと思います。

[ ]
RE:44522 【添付ファイル圧縮-7zip.mac】No.44523
ZZPOP さん 13/05/30 11:11
 
ありがとうございました!!
「CompressAll:」の下に追記して動作確認も出来ました!!
本当ありがとうございます!!!



> 受信系メールにもパスワードを設定するようにマクロを改造するとしたら、
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>だけたらと思います。


[ ]
RE:44513 【添付ファイル圧縮-7zip.mac】No.44666
ZZPOP さん 13/07/07 07:57
 
いつもお世話になります。6.14にて
「(圧縮する)マクロを中断した後「すべて選択」が効かない件」が解決されてました。
対応いただき本当にありがとうございました!
御礼申し上げます


> パスワード設定が無視されてしまう件ですが、受信系メールの添付ファイルを
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
> なんとか、次のβ版(V6.14β2)で直せるように、トライしてみます。

[ ]