暗号化zip自動解凍マクロNo.04704
かずお さん 19/02/09 20:22
 
どこかに以下のURLの「解凍用マクロ」はないでしょうか?
http://kiki47642.s1002.xrea.com/?p=313


1通目パスワード付きZIPファイル、2通目そのzipパスワードが多く
この解凍を自動化したいと考えています。

[ ]
RE:04704 暗号化zip自動解凍マクロNo.04719
秀まるお2 さん 19/02/12 11:49
 
 パスワード付きzip形式で送ってくるケースは最近多いですが、それの解凍を自動
でやるマクロは、僕の知る限りは無いです。

 僕の方で作ってみてもいいですけども、そのためには、パスワード入りメールの文
面がどんな具合か教えてほしいです。

 パスワード入りメールのメール本文の文面の、特にパスワードの記述してある前後
付近の文面をコピペしてここの会議室に書き込んでいただくことは出来ますでしょう
か。それか、"maruo@mitene.or.jp"宛てにメールのサンプルを送っていただくか。

 (パスワードは"*******"とかに伏せ字化して)

[ ]
RE:04719 暗号化zip自動解凍マクロNo.04722
ヒラメ さん 19/02/12 14:45
 
こんにちは。横から失礼して少し便乗してしまいます。

私のところでも同様な自動暗号化zip付きのメールが来るため、少しでも手間を減ら
すようにマクロを組んだりしていました。ものすごく中途半端なのですがご参考に共
有したいと思います。

パスワードメールのサンプルは以下のようなものです。

===============
[宛先メールアドレス] 様

暗号化したファイルを別メールで送信しましたので、
パスワードをお知らせします。

件名 : [暗号化zip付きメールの件名]

パスワード : 123456789ABCDEF0

よろしくお願いします。
[以下に英文が続く]
===============


暗号化zipが付いているメールを選択した状態で、下記のマクロを実行すると、パス
ワードメール(元メールへの返信メール用のヘッダが付いている)を検索し、パス
ワードをコピーしたうえで7zipでzipファイルを開くという動作をします。

ただし、HTMLメールで画像が埋め込まれている場合にうまく動作しません。そのあた
りは面倒になってしまい対応していません・・・。

もし何かのご参考になるようでしたらご自由に改造してご使用ください。


以下はマクロです。

loaddll "tkinfo.dll";

// 秀丸メールの検索パック復元予約
##n = dllfunc("AutoRestoreFindPack");

// 秀丸エディタの検索条件復元予約
setcompatiblemode 0x00020000;

// オリジナルメールのMessage-Idを取得(パスワードメールのIn-Reply-Toにも入っ
ているはず)
$$msgid = dllfuncstr("CurrentHeader", "Message-Id");
// Message-Idを囲っている"<>"を取り除く
if(wcsleftstr($$msgid, 1) == "<"){
  $$msgid = wcsmidstr($$msgid, 1, wcslen($$msgid) - 2);
}

// 添付ファイルの個数
##atch = dllfunc("CountCurrentHeader", "X-Attach");

// 添付ファイルパスを取得
$$file = dllfuncstr("CurrentHeader", "X-Attach");

// HTMLメールがプレビューされているかどうか
##html = dllfunc("IsHtmlMailViewerVisible");

// オリジナルメールのDateを取得(検索範囲を絞るため、その前後5分を検索範囲と
する)
$$date1 = dllfuncstr("FormatDate", dllfuncstr("ShiftDate", dllfuncstr("Curre
ntHeader", "Date"), "-0.0.5"), "YYYY/MM/DD hh:mm");
$$date2 = dllfuncstr("FormatDate", dllfuncstr("ShiftDate", dllfuncstr("Curre
ntHeader", "Date"), "+0.0.5"), "YYYY/MM/DD hh:mm");

$$subject = "[パスワードをお知らせします][Password] ";

// 検索パック指定
// 条件1      = Message-Id検索、対象ヘッダIn-Reply-To
// 条件2      = 件名検索、大文字/小文字の区別
// 検索範囲   = 一覧内
// 追加の条件 = AND、添付ファイル付きじゃない、Message-Idあり、Referencesあ
り、HTMLメールじゃない、Date指定
##n = dllfunc("SetFindPack", "(\"" + $$msgid + "\", casesense, word, target=
person)and(\"" + $$subject + "\", casesense, target=subject)and(\"\", target
=smallheaderbody)and(\"\", target=smallheaderbody), flag=!attach&messageid&i
nreplyid&!html&date=" + $$date1 + "-" + $$date2 + ", messageidtarget=inreply
id, subfolder=0, inmail=0, hilight=0");

if(##n == 0){
  // 検索パック指定に失敗していたらそこで終了
  freedll;
  endmacro;
}

##n = dllfunc("DisableDraw", 0);

// 上候補
##n = dllfunc("FindUp");
##dir = 0;

if(##n == 0){
  // 見つからなければ、下候補
  ##n = dllfunc("FindDown");
  ##dir = 1;
}

if(##n == 0){
  // それでも見つからなければそこで終了
  ##n = dllfunc("EnableDraw");
  message "パスワードメールが見つかりませんでした。マクロを終了します。";
  freedll;
  endmacro;
}

// 選択されているメールの特定部分の文字列を取得してくる
$$psw = gettext2(13, 8, 29, 8, 1);
//message $$psw;
// コピー
setclipboard $$psw;

// 履歴戻り を裏技実行
//##n = sendmessage(hidemaruhandle(0),0x111,40206,0);

// 履歴戻りの代わりにオリジナルメールをMessage-Idから検索しなおす
##n = dllfunc("SetFindPack", "(\"" + $$msgid + "\", casesense, word, target=
person)and(\"\", casesense, target=subject)and(\"\", target=smallheaderbody)
and(\"\", target=smallheaderbody), flag=messageid&date=" + $$date1 + "-" + $
$date2 + ", messageidtarget=messageid, subfolder=0, inmail=0, hilight=0");
if(##dir == 1){
  ##n = dllfunc("FindUp");
}else{
  ##n = dllfunc("FindDown");
}

// ホームディレクトリを取得(末尾は必ず\)
$$home = dllfuncstr("HomeDir");
// アカウント名(フォルダ名)を取得
$$acct = dllfuncstr("CurrentAccount");

run "C:\\Program Files\\7-Zip\\7zFM.exe \"" + $$home + $$acct + "\\" + $$fil
e + "\"";

##n = dllfunc("EnableDraw");
if(##html){
  // HTMLメールのインライン表示切替
  ##n = sendmessage( hidemaruhandle(0), 0x111, 40336, 0);
}
freedll;
endmacro;

[ ]
RE:04722 暗号化zip自動解凍マクロNo.04723
na311 さん 19/02/12 18:04
 
お世話になります。

私も暗号化zip自動解答マクロがあれば非常に助かります。

送付元によって少し形式が違うようで何パターンかあります。
下記にお知らせします。
パスワードだけでは特に開示して問題ないと思うので
そのままお知らせします。

<パターン1>

暗号化を解除する為のパスワードをお知らせします。

【対象メール情報】
 送信日時:*******
 題名  :*******

【暗号化ファイル名】
*******

【パスワード】
%=LgqPZ1bKqJ&pY


<パターン2>

以下メールの添付ファイルの解凍パスワードをお知らせします。

添付ファイル名: *******
解凍パスワード: tCZwKFforTFpz9Ch


<パターン3>

To *****@*****

Please use the following password to decrypt and open the attached file.

Subject : *******
Password : *******

Thank you.


<パターン4>

【ご注意】
※ 本メールは自動配信メールです。
     こちらのメッセージはパスワード通知専用となっておりますので、
     ご返信いただいても回答は致しかねますのであらかじめご了承ください。
=============================================================


平素はお世話になっております。
** *** <****@*******> です。

以下の件名でパスワードつきのファイルを送信させて頂きましたので、
パスワードをお知らせ致します。

---------------------------------------------------------------------------
【件名】:       *******
【パスワード】:    Sc?F3yJXJ^i^AUDf
---------------------------------------------------------------------------


以上4パターンになります。
よろしくお願い致します。

[ ]
RE:04723 暗号化zip自動解凍マクロNo.04724
秀まるお2 さん 19/02/12 18:15
 
 サンプルどうもです。

 ヒラメさんのマクロはパスワード通知メールを自動で検索するということで、それ
は少し高度なことなのでそれは僕はやめとこうかなぁと・・・。

 暗号化zipしたメールとパスワードメールの2通を選択してマクロ実行したら解凍
される、みたいなのにしようと思っています。(普通は暗号化zipメールの直後に届
くと思うので)

 少々お待ちください。

[ ]
RE:04724 暗号化zip自動解凍マクロNo.04726
秀まるお2 さん 19/02/12 22:43
 
 とりあえず作ってみましたが、長くなってしまいました。

 ヒラメさんのマクロを参考にさせていただきました。

 暗号化ZIP付きメールとパスワード入りメールの2通を選択して実行する形式にマ
クロにしています。

----------------------------------------------------------------------------
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
//
    loaddll "tkinfo.dll";

    // 秀丸メールの検索パック復元予約
    #n = dllfunc("AutoRestoreFindPack");

    // 秀丸エディタの検索条件復元予約
    setcompatiblemode 0x00020000;

    #n = dllfunc("SetJapaneseCodePageMode", 1);

    #n = dllfunc("SelectedMailCount");
    if( #n != 2 ) {
        message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
        endmacro;
    }
    //対象のzipとパスワードを取り出す。
    $zipfile = "";
    $password = "";
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        #foundzip = 0;
        if( $zipfile == "" ) {
            #count = dllfunc("CountCurrentHeader", "X-Attach");
            if( #count != 0 ) {
                #i = 0;
                while( #i < #count ) {
                    $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                    $ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
                    if( $ext == ".zip" ) {
                        $zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
                        #foundzip = 1;
                        break;
                    }
                    #i = #i + 1;
                }
            }
        }
        if( $password == "" && #foundzip == 0 ) {
            $text = gettext( 0, 0, 999, linecount );        //メール本文全部
            loaddll "HmJre.dll";
            $text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
                        //改行を空白に変換しておく。
            $text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
 " ", 2);
                        //全角空白を半角空白に変換しておく。
            $text = $text + " ";        //末端に空白を付けておく。
           

            $pattern[0] = "^.* 【パスワード】[ ]*:?[ ]*([^ ]+?) .*$";
            $pattern[1] = "^.* 解凍パスワード[ ]*[::][ ]*([^ ]+?) .*$";
            $pattern[2] = "^.* Password[ ]*:[ ]*([^ ]+?) .*$";

            #iPattern = 0;
            while(1) {
                $pattern = $pattern[#iPattern];
                if( $pattern == "" ) {
                    break;
                }
                $password = dllfuncstr("ReplaceRegularNoCaseSense", $pattern,
 $text, 0, "\\1", 0);
                if( $password != "" ) {
                    break;
                }
                #iPattern = #iPattern + 1;
            }

            loaddll "tkinfo.dll";       //元に戻す。
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    if( $zipfile == "" ) {
        message "zip形式ファイルが見つかりませんでした。";
        endmacro;
    }
    if( $password == "" ) {
        message "パスワードが見つかりませんでした。";
        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;
        }
    }
    $outfolder = getenv("temp") + "\\PasswordZipTemp";
    #n = dllfunc("Bypass_CreateDirectory", $outfolder);
    $command = "\"" + $7zip + "\" x -p" + $password + " -o\"" + $outfolder +
 "\" \"" + $zipfile + "\"";
    runsync2 $command;
    if( !result ) {
        message "7zipの実行に失敗しました。";
        endmacro;
    }
    openbyshell $outfolder;

[ ]
RE:04726 暗号化zip自動解凍マクロNo.04736
秀まるお2 さん 19/02/14 09:31
 
 メールで個別にご希望があって、マクロを少し直しました。

 解凍して出てきたウィンドウを閉じたら解凍したファイルをすべて削除してほしい
という要望があったのですが、それは実現が難しいので、代わりに、マクロの最後で
「削除しますか?」の問い合わせを出して、そこで「はい」としたら削除できるよう
にしました。

----------------------------------------------------------------------------
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
//
    loaddll "tkinfo.dll";

    // 秀丸メールの検索パック復元予約
    #n = dllfunc("AutoRestoreFindPack");

    // 秀丸エディタの検索条件復元予約
    setcompatiblemode 0x00020000;

    #n = dllfunc("SetJapaneseCodePageMode", 1);

    #n = dllfunc("SelectedMailCount");
    if( #n != 2 ) {
        message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
        endmacro;
    }
    //対象のzipとパスワードを取り出す。
    $zipfile = "";
    $password = "";
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        #foundzip = 0;
        if( $zipfile == "" ) {
            #count = dllfunc("CountCurrentHeader", "X-Attach");
            if( #count != 0 ) {
                #i = 0;
                while( #i < #count ) {
                    $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                    $ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
                    if( $ext == ".zip" ) {
                        $zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
                        #foundzip = 1;
                        break;
                    }
                    #i = #i + 1;
                }
            }
        }
        if( $password == "" && #foundzip == 0 ) {
            $text = gettext( 0, 0, 999, linecount );        //メール本文全部
            loaddll "HmJre.dll";
            $text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
                        //改行を空白に変換しておく。
            $text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
 " ", 2);
                        //全角空白を半角空白に変換しておく。
            $text = $text + " ";        //末端に空白を付けておく。
           

            $pattern[0] = "^.* 【パスワード】[ ]*:?[ ]*([^ ]+?) .*$";
            $pattern[1] = "^.* 解凍パスワード[ ]*[::][ ]*([^ ]+?) .*$";
            $pattern[2] = "^.* Password[ ]*:[ ]*([^ ]+?) .*$";

            #iPattern = 0;
            while(1) {
                $pattern = $pattern[#iPattern];
                if( $pattern == "" ) {
                    break;
                }
                $password = dllfuncstr("ReplaceRegularNoCaseSense", $pattern,
 $text, 0, "\\1", 0);
                if( $password != "" ) {
                    break;
                }
                #iPattern = #iPattern + 1;
            }

            loaddll "tkinfo.dll";       //元に戻す。
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    if( $zipfile == "" ) {
        message "zip形式ファイルが見つかりませんでした。";
        endmacro;
    }
    if( $password == "" ) {
        message "パスワードが見つかりませんでした。";
        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;
        }
    }
    $outfolder = getenv("temp") + "\\PasswordZipTemp";
    #n = dllfunc("Bypass_CreateDirectory", $outfolder);
    $command = "\"" + $7zip + "\" x -p" + $password + " -o\"" + $outfolder +
 "\" \"" + $zipfile + "\"";
    runsync2 $command;
    if( !result ) {
        message "7zipの実行に失敗しました。";
        endmacro;
    }
    openbyshell $outfolder;
    question "作業が終わった後用:\n解凍した添付ファイルを削除しますか?";
    if( result == yes ) {
        runsync2 "cmd.exe /c rmdir /s /q \"" + $outfolder + "\"";
    }

[ ]
RE:04736 暗号化zip自動解凍マクロNo.04752
秀まるお2 さん 19/02/16 08:51
 
 もう1つ別バージョンを作ったので、これまた会議室に書き込みさせていただきま
す。

 解凍する先を、「マイドキュメント」の配下のPasswordZipTempフォルダとして、
マクロ実行の度に古いファイルを削除するようにだけしました。(削除するかどうか
の問い合わせは無し)

----------------------------------------------------------------------------
----
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
//
    loaddll "tkinfo.dll";

    // 秀丸メールの検索パック復元予約
    #n = dllfunc("AutoRestoreFindPack");

    // 秀丸エディタの検索条件復元予約
    setcompatiblemode 0x00020000;

    #n = dllfunc("SetJapaneseCodePageMode", 1);

    #n = dllfunc("SelectedMailCount");
    if( #n != 2 ) {
        message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
        endmacro;
    }
    //対象のzipとパスワードを取り出す。
    $zipfile = "";
    $password = "";
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        #foundzip = 0;
        if( $zipfile == "" ) {
            #count = dllfunc("CountCurrentHeader", "X-Attach");
            if( #count != 0 ) {
                #i = 0;
                while( #i < #count ) {
                    $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                    $ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
                    if( $ext == ".zip" ) {
                        $zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
                        #foundzip = 1;
                        break;
                    }
                    #i = #i + 1;
                }
            }
        }
        if( $password == "" && #foundzip == 0 ) {
            $text = gettext( 0, 0, 999, linecount );        //メール本文全部
            loaddll "HmJre.dll";
            $text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
                        //改行を空白に変換しておく。
            $text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
 " ", 2);
                        //全角空白を半角空白に変換しておく。
            $text = $text + " ";        //末端に空白を付けておく。
           

            $pattern[0] = "^.* 【パスワード】[ ]*:?[ ]*([^ ]+?) .*$";
            $pattern[1] = "^.* 解凍パスワード[ ]*[::][ ]*([^ ]+?) .*$";
            $pattern[2] = "^.* Password[ ]*:[ ]*([^ ]+?) .*$";

            #iPattern = 0;
            while(1) {
                $pattern = $pattern[#iPattern];
                if( $pattern == "" ) {
                    break;
                }
                $password = dllfuncstr("ReplaceRegularNoCaseSense", $pattern,
 $text, 0, "\\1", 0);
                if( $password != "" ) {
                    break;
                }
                #iPattern = #iPattern + 1;
            }

            loaddll "tkinfo.dll";       //元に戻す。
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    if( $zipfile == "" ) {
        message "zip形式ファイルが見つかりませんでした。";
        endmacro;
    }
    if( $password == "" ) {
        message "パスワードが見つかりませんでした。";
        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\\Microsoft\\Windows\\CurrentVersion\\Exp
lorer\\Shell Folders";
 $outfolder = getregstr("Personal");
 closereg;
    $outfolder = $outfolder + "\\PasswordZipTemp";

    runsync2 "cmd.exe /c rmdir /s /q \"" + $outfolder + "\"";  //古いファイ
ルのゴミを削除
    #n = dllfunc("Bypass_CreateDirectory", $outfolder);
    $command = "\"" + $7zip + "\" x -p" + $password + " -o\"" + $outfolder +
 "\" \"" + $zipfile + "\"";
    runsync2 $command;
    if( !result ) {
        message "7zipの実行に失敗しました。";
        endmacro;
    }
    openbyshell $outfolder;

[ ]
RE:04752 暗号化zip自動解凍マクロNo.04753
かずお さん 19/02/17 21:17
 
お礼が遅くなり申し訳ございません。

大半のメールは自動で解凍できるようになました。

ただ、以下の2つのメールのみパスワードが見つかりませんとエラーになります。

$pattern[x] =から右の記述をいろいろ変えてみたのですうまくいきません。

お願いばかりで恐縮なのですが$pattern[x] = の記述をお教えいただくことは可能で
しょうか?




■メール1
To: xxxx@test.com
次のメールの添付ファイルのパスワードをご連絡いたします。
A password will be included in the following e-mail (to be able to access th
e files attached to this e-mail).

[パスワード/Password]
ppppppp

* Japanese
1. 件名
xxxxについて
2. 送信日時
2019-xx-xx xx:xx:xx
3. 添付ファイル名
xxxxxxxxx.zip

添付ファイルは、Windowsの標準機能より安全性の高いAES-256で暗号化しています。
そのため、Windowsの標準機能では復号できません。
お手数ですが、AES-256に対応したツールを用いて復号をお願いいたします。

このメールは自動配信されています。
送信専用アドレスを用いているため、返信しないでください。

* English


■メール2

xxxxx@xxxx.xx.jp 殿

以下のメールの添付ファイルのパスワードをご連絡します。

This is the password for the attachments.

----------------------------------------
【件名(subject)】
xxxxxxx
【送信者(sender)】
xxxx@xxx.xx.jp
【送信日時(time)】
2019-xx-xx xx:xx:xx


【添付ファイル名(file name)】
xxxxxx.zip
【暗号化パスワード(password)】
pppeeFA3Zr1nfhL6R


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

このメールは自動で配信されています。
メールの内容は送信者にお問い合わせください。

This email is an automatically generated.
Please contact the sender contents of the e-mail.

[ ]
RE:04753 暗号化zip自動解凍マクロNo.04754
秀まるお2 さん 19/02/18 09:27
 
 直してみました。

            $pattern[3] = "^.* \\[パスワード/Password\\][ ]*([^ ]+?) .*$";

 の部分が追加されてるだけですが。

------------------------------------------------------------------------------
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
//
    loaddll "tkinfo.dll";

    // 秀丸メールの検索パック復元予約
    #n = dllfunc("AutoRestoreFindPack");

    // 秀丸エディタの検索条件復元予約
    setcompatiblemode 0x00020000;

    #n = dllfunc("SetJapaneseCodePageMode", 1);

    #n = dllfunc("SelectedMailCount");
    if( #n != 2 ) {
        message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
        endmacro;
    }
    //対象のzipとパスワードを取り出す。
    $zipfile = "";
    $password = "";
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        #foundzip = 0;
        if( $zipfile == "" ) {
            #count = dllfunc("CountCurrentHeader", "X-Attach");
            if( #count != 0 ) {
                #i = 0;
                while( #i < #count ) {
                    $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                    $ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
                    if( $ext == ".zip" ) {
                        $zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
                        #foundzip = 1;
                        break;
                    }
                    #i = #i + 1;
                }
            }
        }
        if( $password == "" && #foundzip == 0 ) {
            $text = gettext( 0, 0, 999, linecount );        //メール本文全部
            loaddll "HmJre.dll";
            $text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
                        //改行を空白に変換しておく。
            $text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
 " ", 2);
                        //全角空白を半角空白に変換しておく。
            $text = $text + " ";        //末端に空白を付けておく。
           

            $pattern[0] = "^.* 【パスワード】[ ]*:?[ ]*([^ ]+?) .*$";
            $pattern[1] = "^.* 解凍パスワード[ ]*[::][ ]*([^ ]+?) .*$";
            $pattern[2] = "^.* Password[ ]*:[ ]*([^ ]+?) .*$";
            $pattern[3] = "^.* \\[パスワード/Password\\][ ]*([^ ]+?) .*$";

            #iPattern = 0;
            while(1) {
                $pattern = $pattern[#iPattern];
                if( $pattern == "" ) {
                    break;
                }
                $password = dllfuncstr("ReplaceRegularNoCaseSense", $pattern,
 $text, 0, "\\1", 0);
                if( $password != "" ) {
                    break;
                }
                #iPattern = #iPattern + 1;
            }

            loaddll "tkinfo.dll";       //元に戻す。
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    if( $zipfile == "" ) {
        message "zip形式ファイルが見つかりませんでした。";
        endmacro;
    }
    if( $password == "" ) {
        message "パスワードが見つかりませんでした。";
        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\\Microsoft\\Windows\\CurrentVersion\\Exp
lorer\\Shell Folders";
    $outfolder = getregstr("Personal");
    closereg;
    $outfolder = $outfolder + "\\PasswordZipTemp";

    runsync2 "cmd.exe /c rmdir /s /q \"" + $outfolder + "\"";       //古いフ
ァイルのゴミを削除
    #n = dllfunc("Bypass_CreateDirectory", $outfolder);
    $command = "\"" + $7zip + "\" x -p" + $password + " -o\"" + $outfolder +
 "\" \"" + $zipfile + "\"";
    runsync2 $command;
    if( !result ) {
        message "7zipの実行に失敗しました。";
        endmacro;
    }
    openbyshell $outfolder;

[ ]
RE:04754 暗号化zip自動解凍マクロNo.04759
かずお さん 19/02/19 08:34
 
ありがとうごいます
■メール1、解凍できるようになりました!
■メール2がパスワードが見つかりませんとエラーになります。。。

■メール2
xxxxx@xxxx.xx.jp 殿

以下のメールの添付ファイルのパスワードをご連絡します。

This is the password for the attachments.

----------------------------------------
【件名(subject)】
xxxxxxx
【送信者(sender)】
xxxx@xxx.xx.jp
【送信日時(time)】
2019-xx-xx xx:xx:xx


【添付ファイル名(file name)】
xxxxxx.zip
【暗号化パスワード(password)】
pppeeFA3Zr1nfhL6R


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

このメールは自動で配信されています。
メールの内容は送信者にお問い合わせください。

This email is an automatically generated.
Please contact the sender contents of the e-mail.

[ ]
RE:04759 暗号化zip自動解凍マクロNo.04760
秀まるお2 さん 19/02/19 08:44
 
 すみません。メール2の方を見逃してました。失礼しました。

---------------------------------------------------
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
//
    loaddll "tkinfo.dll";

    // 秀丸メールの検索パック復元予約
    #n = dllfunc("AutoRestoreFindPack");

    // 秀丸エディタの検索条件復元予約
    setcompatiblemode 0x00020000;

    #n = dllfunc("SetJapaneseCodePageMode", 1);

    #n = dllfunc("SelectedMailCount");
    if( #n != 2 ) {
        message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
        endmacro;
    }
    //対象のzipとパスワードを取り出す。
    $zipfile = "";
    $password = "";
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        #foundzip = 0;
        if( $zipfile == "" ) {
            #count = dllfunc("CountCurrentHeader", "X-Attach");
            if( #count != 0 ) {
                #i = 0;
                while( #i < #count ) {
                    $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                    $ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
                    if( $ext == ".zip" ) {
                        $zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
                        #foundzip = 1;
                        break;
                    }
                    #i = #i + 1;
                }
            }
        }
        if( $password == "" && #foundzip == 0 ) {
            $text = gettext( 0, 0, 999, linecount );        //メール本文全部
            loaddll "HmJre.dll";
            $text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
                        //改行を空白に変換しておく。
            $text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
 " ", 2);
                        //全角空白を半角空白に変換しておく。
            $text = $text + " ";        //末端に空白を付けておく。
           

            $pattern[0] = "^.* 【パスワード】[ ]*:?[ ]*([^ ]+?) .*$";
            $pattern[1] = "^.* 解凍パスワード[ ]*[::][ ]*([^ ]+?) .*$";
            $pattern[2] = "^.* Password[ ]*:[ ]*([^ ]+?) .*$";
            $pattern[3] = "^.* \\[パスワード/Password\\][ ]*([^ ]+?) .*$";
            $pattern[4] = "^.* 【暗号化パスワード\\(password\\)】[ ]*([^ ]
+?) .*$";

            #iPattern = 0;
            while(1) {
                $pattern = $pattern[#iPattern];
                if( $pattern == "" ) {
                    break;
                }
                $password = dllfuncstr("ReplaceRegularNoCaseSense", $pattern,
 $text, 0, "\\1", 0);
                if( $password != "" ) {
                    break;
                }
                #iPattern = #iPattern + 1;
            }

            loaddll "tkinfo.dll";       //元に戻す。
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    if( $zipfile == "" ) {
        message "zip形式ファイルが見つかりませんでした。";
        endmacro;
    }
    if( $password == "" ) {
        message "パスワードが見つかりませんでした。";
        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\\Microsoft\\Windows\\CurrentVersion\\Exp
lorer\\Shell Folders";
    $outfolder = getregstr("Personal");
    closereg;
    $outfolder = $outfolder + "\\PasswordZipTemp";

    runsync2 "cmd.exe /c rmdir /s /q \"" + $outfolder + "\"";       //古いフ
ァイルのゴミを削除
    #n = dllfunc("Bypass_CreateDirectory", $outfolder);
    $command = "\"" + $7zip + "\" x -p" + $password + " -o\"" + $outfolder +
 "\" \"" + $zipfile + "\"";
    runsync2 $command;
    if( !result ) {
        message "7zipの実行に失敗しました。";
        endmacro;
    }
    openbyshell $outfolder;

[ ]
RE:04760 暗号化zip自動解凍マクロNo.04763
かずお さん 19/02/20 08:45
 
ありがとうございます。
無事解凍できました。

[ ]
RE:04763 暗号化zip自動解凍マクロNo.04764
秀まるお2 さん 19/02/20 11:43
 
 確認どうもです。

 せっかくなので、うちのライブラリにもアップロードしようと思います。

[ ]
RE:04764 暗号化zip自動解凍マクロNo.04828
karaulsa さん 19/03/06 22:12
 
大変便利そうなので是非利用させて頂きたいのですが、上手くいきません。
特に<メール1>は「添付ファイル圧縮-7zip-パスワード別便通知.mac」を利用させて
頂いて
作成したのですが・・・・

<メール1>・・・これは秀丸メールで作成しました。

暗号化したファイルを別メールで送信しましたので、
パスワードをお知らせします。


件名 : テスト

パスワード : EGZNAD

よろしくお願いします。

<メール2>

いつも大変お世話になっております。
送信済みメールの添付ファイルを復号するために必要なパスワードをご連絡します。

添付ファイル名:支払明細.zip
パスワード:xIgYkd7f

お手数をお掛けしますが、ご確認の程よろしくお願い致します。

[ ]
RE:04828 暗号化zip自動解凍マクロNo.04830
秀まるお2 さん 19/03/07 08:42
 
 すみません。自分で作ったマクロのファイルが解凍できてませんでした。

 マクロ内容は以下の通りで大丈夫だと思います。ライブラリにもまたアップロード
しなおします。

---------------PasswordZipExtract.mac---------------------
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
// 2019.03.07 パスワードの形式追加。
//
// by 秀まるお
// hidesoft.8:04704| 暗号化zip自動解凍マクロ
//
//
//説明:
// このマクロはパスワード付きzipの添付ファイルを簡単に解凍する用のマクロです。
// パスワード付きzipの添付ファイル入りメールは、そのメールとは別便でパスワード
// を通知してきます。このマクロはその別便メールの中からパスワードを取り出して、
// 自動で解凍します。
//
// マクロを実行する前に、zip添付ファイル付きのメールとパスワード通知メールの
// 2通を選択して実行する必要があります。

//解凍したファイルは「ドキュメント」フォルダ配下のPasswordZipTempフォルダに
// 作成されます。古いファイルが残ってる場合はマクロ実行のタイミングで削除され
// てから解凍されます。
//

    loaddll "tkinfo.dll";

    // 秀丸メールの検索パック復元予約
    #n = dllfunc("AutoRestoreFindPack");

    // 秀丸エディタの検索条件復元予約
    setcompatiblemode 0x00020000;

    #n = dllfunc("SetJapaneseCodePageMode", 1);

    #n = dllfunc("SelectedMailCount");
    if( #n != 2 ) {
        message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
        endmacro;
    }
    //対象のzipとパスワードを取り出す。
    $zipfile = "";
    $password = "";
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        #foundzip = 0;
        if( $zipfile == "" ) {
            #count = dllfunc("CountCurrentHeader", "X-Attach");
            if( #count != 0 ) {
                #i = 0;
                while( #i < #count ) {
                    $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                    $ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
                    if( $ext == ".zip" ) {
                        $zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
                        #foundzip = 1;
                        break;
                    }
                    #i = #i + 1;
                }
            }
        }
        if( $password == "" && #foundzip == 0 ) {
            $text = gettext( 0, 0, 999, linecount );        //メール本文全部
            loaddll "HmJre.dll";
            $text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
                        //改行を空白に変換しておく。
            $text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
 " ", 2);
                        //全角空白を半角空白に変換しておく。
            $text = $text + " ";        //末端に空白を付けておく。
           

            $pattern[0] = "^.* 【パスワード】[ ]*:?[ ]*([^ ]+?) .*$";
            $pattern[1] = "^.* 解凍パスワード[ ]*[::][ ]*([^ ]+?) .*$";
            $pattern[2] = "^.* Password[ ]*:[ ]*([^ ]+?) .*$";
            $pattern[3] = "^.* \\[パスワード/Password\\][ ]*([^ ]+?) .*$";
            $pattern[4] = "^.* 【暗号化パスワード\\(password\\)】[ ]*([^ ]
+?) .*$";
            $pattern[5] = "^.* パスワード[ ]*[::][ ]*([^ ]+?) .*$";

            #iPattern = 0;
            while(1) {
                $pattern = $pattern[#iPattern];
                if( $pattern == "" ) {
                    break;
                }
                $password = dllfuncstr("ReplaceRegularNoCaseSense", $pattern,
 $text, 0, "\\1", 0);
                if( $password != "" ) {
                    break;
                }
                #iPattern = #iPattern + 1;
            }

            loaddll "tkinfo.dll";       //元に戻す。
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    if( $zipfile == "" ) {
        message "zip形式ファイルが見つかりませんでした。";
        endmacro;
    }
    if( $password == "" ) {
        message "パスワードが見つかりませんでした。";
        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\\Microsoft\\Windows\\CurrentVersion\\Exp
lorer\\Shell Folders";
    $outfolder = getregstr("Personal");
    closereg;
    $outfolder = $outfolder + "\\PasswordZipTemp";

    runsync2 "cmd.exe /c rmdir /s /q \"" + $outfolder + "\"";       //古いフ
ァイルのゴミを削除
    #n = dllfunc("Bypass_CreateDirectory", $outfolder);
    $command = "\"" + $7zip + "\" x -p" + $password + " -o\"" + $outfolder +
 "\" \"" + $zipfile + "\"";
    runsync2 $command;
    if( !result ) {
        message "7zipの実行に失敗しました。";
        endmacro;
    }
    openbyshell $outfolder;

[ ]
RE:04830 暗号化zip自動解凍マクロNo.04831
karaulsa さん 19/03/07 11:31
 
出来ました。迅速な対応有り難うございました。秀丸メールは
長い間使わせて貰っていますが、なくてはならないツールです。
これからもよろしくお願いします。

[ ]