HTMLパートとTEXTパートの切り替え表示No.03333
カンポ さん 12/08/04 07:18
 
HTMLパートとTEXTパートを比較する必要がある場合、いい方法はあるでしょうか?
ざっと見渡しましたがそれらしきところが見つからないので質問してみました。
もし、現状無理でしたら、何らかの方法で表示切り替えができれば非常に助かります。

[ ]
RE:03333 HTMLパートとTEXTパートの切り替No.03334
秀まるお さん 12/08/06 09:18
 
 htmlパートをテキスト形式(プレーンテキスト)形式に変換した物(秀丸
メールが変換した物)と、元々のメールの中にプレーンテキスト形式で入ってい
る物を比較したいってことでしょうか。

 もしそうだとしたら、それ用のマクロを作ってなんとかする作戦が可能かと思
います。

 マクロを作るのはちょっと手間がかかるので、とりあえず、そういう話なのか
どうかだけ教えて欲しいです。

[ ]
RE:03334 HTMLパートとTEXTパートの切り替No.03335
カンポ さん 12/08/07 21:03
 
> htmlパートをテキスト形式(プレーンテキスト)形式に変換した物(秀丸
>メールが変換した物)と、元々のメールの中にプレーンテキスト形式で入ってい
>る物を比較したいってことでしょうか。

そういうことになりますね。


> もしそうだとしたら、それ用のマクロを作ってなんとかする作戦が可能かと思
>います。

ところで、かなり過去のメールで、手動で比較をしようと思って、
オプションからtext/plainパートが何とかというところに
チェックを入れたり外したりしてみたのですが、
元のログがないとか何とかで表示されなかったことがありました。
これはちょっとショックでした。。。
曖昧な記述で申し訳ないのですが…。

マクロを作っておけばそういうことも防げるようになるでしょうか?

テキストパートとHTMLパートがかなり違うメールがあることがあるの
ですが、それを比較したいことがあるのと、私自身がphpを使って
テキストパートとHTMLパートで少し異なった内容を書かなければ
ならない必要性が生じたのですが、うまくいっているかどうかの
確認をするのに切り替え表示機能がぜひとも欲しくなりました。

> マクロを作るのはちょっと手間がかかるので、とりあえず、そういう話なのか
>どうかだけ教えて欲しいです。

お手数をお掛けします。基本的にまるおさんのお考えどおりです。


[ ]
RE:03335 HTMLパートとTEXTパートの切り替No.03336
カンポ さん 12/08/07 21:46
 
補足します。

>ところで、かなり過去のメールで、手動で比較をしようと思って、
>オプションからtext/plainパートが何とかというところに
>チェックを入れたり外したりしてみたのですが、
>元のログがないとか何とかで表示されなかったことがありました。
>これはちょっとショックでした。。。
>曖昧な記述で申し訳ないのですが…。

もう一度確認してみました。
「text/plainパートがあっても無視する」というオプションを
オンオフしてもメールが何も変わらなかったのでしばらく考えて、
もしかしたら受信解析をし直す必要があるのかと思って、
それをやったところ、かなり過去のメールではログがないという
ことでエラーが出たということです。

あと、受信ログが残っていたとしても、この手動でのやり方では
メールが増えてしまうし、何しろ手間がかかりすぎでまったく
実用的ではないのです。

それで、簡単に切り替え表示ができればありがたいということで
要望させていただきました。

[ ]
RE:03336 HTMLパートとTEXTパートの切り替No.03337
秀まるお さん 12/08/08 10:06
 
 たぶん理解されてるのだと思いますが、秀丸メールの普通のフォルダに発生し
てるメールは、デコードした後の形式のメールであって、デコード前の情報のす
べては含まれてないことが多いです。

 例えば「text/plain」と「text/html」の両方のパートを含むメールを
デコードすると、デコードされたメール本文は、text/plainのパート内容がその
まま入るか、またはtext/htmlパートを秀丸メール独自にプレーンテキストに変
換した結果か、どちらかだけが入ります。例えばtext/htmlパートを独自に変換
した結果を入れた場合なら、text/plainパートの内容は破棄されたことになりま
す。

 マクロを使ってもこの辺の仕組み自体はどうにも変更不可です。

> 私自身がphpを使って
> テキストパートとHTMLパートで少し異なった内容を書かなければ
> ならない必要性が生じたのですが、うまくいっているかどうかの
> 確認をするのに切り替え表示機能がぜひとも欲しくなりました。

 簡単に表示切り替えするようなマクロにするのはちょっと大変ですが、とりあ
えず、「このメールをもしもtext/plain形式でデコードしたら、こうなります」、
「このメールをtext/html形式からplain-textに変換したらこうなります」みた
いな結果を表示させるマクロ程度でしたら一応出来るかなぁと思いました。

 もちろん受信ログが無いとマクロはうまく動かないので、しいてそういう目的
で使いたいってことでしたら、テスト期間中だけでも受信ログを削除しないよう
に設定変更していただければいいんじゃないかと思います。(アカウント毎の設
定で削除されないように出来ます)

 ということで一回作ってみます。

[ ]
RE:03337 HTMLパートとTEXTパートの切り替No.03338
秀まるお さん 12/08/08 11:22
 
 とりあえず、メニューでどっち形式かを選択して表示するマクロを作ってみま
した。

 両方の形式で開いて内容比較させるようなマクロも、やろうと思えば出来るよ
うな気はします。


    loaddll "tkinfo.dll";
    #n = dllfunc("SelectedMailCount");
    if( #n != 1 ) {
        message "メールを1通だけ選択して実行してください。";
        endmacro;
    }
    if( hidemarucount != 1 ) {
        message "エディタ・ウィンドウをすべて閉じてから実行してください。";
        endmacro;
    }
    $home = dllfuncstr("HomeDir");
    $tempfolder = $home + "TempMail";
    if( ! existfile( $tempfolder ) ) {
        #n = dllfunc("Bypass_CreateDirectory", $tempfolder );
    }
    $tempmail = $tempfolder + "\\$$$export$$$.eml";
    if( existfile( $tempmail ) ) {
        #n = dllfunc("Bypass_DeleteFile", $tempmail );
    }
    menu "text/plainパートを見る(&T)",
         "text/htmlパートをテキストに変換して見る(&H)";
    #action = result;
    if( #action == 0 ) {
        endmacro;
    }
    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    if( !result ) {
        message "レジストリの参照に失敗しました。";
        endmacro;
    }
    #htmlconv = getregnum( "HtmlConvFlags" );
    #htmlconvPrev = #htmlconv;
    #specialflags2 = getregnum( "SpecialFlags2" );
    #specialflags2Prev = #specialflags2;
    if( #action == 1 ) {
        #htmlconv = #htmlconv & 0xFFFFFFF7;
        #specialflags2 = #specialflags2 | 0x08000000;
    } else {
        #htmlconv = #htmlconv | 8;
        #specialflags2 = #specialflags2 & 0xF7FFFFFF;
    }
    writeregnum "HtmlConvFlags", #htmlconv;
    writeregnum "SpecialFlags2", #specialflags2;
    closereg;
    #n = dllfunc("EnvChangedDanger");

    #n = dllfunc("Export", $tempmail, "mbox", "log", "", "truncate" );

    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    writeregnum "HtmlConvFlags", #htmlconvPrev;
    writeregnum "SpecialFlags2", #specialflags2Prev;
    closereg;

    if( ! existfile( $tempmail ) ) {
        message "受信ログをエクスポートするのに失敗しました。";
        endmacro;
    }
    runsync2 "turukame.exe /v \"" + $tempmail + "\"";
    #n = dllfunc("Bypass_DeleteFile", $tempmail );

    #handle = hidemaruhandle(1);
    setactivehidemaru #handle;
    if( dllfunc("IsHtmlMailViewerVisible") ) {
        #n = sendmessage( hidemaruhandle(0), 0x111, 40336, 0);
    }
    endmacro;

[ ]
RE:03337 HTMLパートとTEXTパートの切り替No.03339
カンポ さん 12/08/09 04:49
 
> 例えば「text/plain」と「text/html」の両方のパートを含むメールを
>デコードすると、デコードされたメール本文は、text/plainのパート内容がその
>まま入るか、またはtext/htmlパートを秀丸メール独自にプレーンテキストに変
>換した結果か、どちらかだけが入ります。例えばtext/htmlパートを独自に変換
>した結果を入れた場合なら、text/plainパートの内容は破棄されたことになりま
>す。

どこかに隠されているわけではなく完全破棄ということなんですね。
常に両方を確保しておいて(つまり破棄なし)どちらか一方だけを表示させるように
するのは、たとえできたとしても、完全に仕様の変更ということで互換性維持とかも
難しくなってしまうんでしょうね。

作っていただいたマクロを早速使ってみました。ありがとうございます。何をやって
いるかはややこしくてよくわかりませんが、手元のメールでは正しく動作しました。

確かにこのマクロなら受信解析をし直す必要はなくなってメールが増えることもなく
なるのでありがたいですが、やはり、まどろっこしいというのは否めませんね。編集
ウィンドウを全部閉じる必要もありますし。

ともかくありがとうございました。

[ ]
RE:03339 HTMLパートとTEXTパートの切り替No.03340
秀まるお さん 12/08/09 08:57
 
 編集ウィンドウを閉じなくてもいいようにだけ直しました。

    loaddll "tkinfo.dll";
    #n = dllfunc("SelectedMailCount");
    if( #n != 1 ) {
        message "メールを1通だけ選択して実行してください。";
        endmacro;
    }
    #hidemarucount = hidemarucount;
    #i = 0;
    while( #i < #hidemarucount ) {
        #handle[#i] = hidemaruhandle(#i);
        #i = #i + 1;
    }
    $home = dllfuncstr("HomeDir");
    $tempfolder = $home + "TempMail";
    if( ! existfile( $tempfolder ) ) {
        #n = dllfunc("Bypass_CreateDirectory", $tempfolder );
    }
    $tempmail = $tempfolder + "\\$$$export$$$.eml";
    if( existfile( $tempmail ) ) {
        #n = dllfunc("Bypass_DeleteFile", $tempmail );
    }
    menu "text/plainパートを見る(&T)",
         "text/htmlパートをテキストに変換して見る(&H)";
    #action = result;
    if( #action == 0 ) {
        endmacro;
    }
    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    if( !result ) {
        message "レジストリの参照に失敗しました。";
        endmacro;
    }
    #htmlconv = getregnum( "HtmlConvFlags" );
    #htmlconvPrev = #htmlconv;
    #specialflags2 = getregnum( "SpecialFlags2" );
    #specialflags2Prev = #specialflags2;
    if( #action == 1 ) {
        #htmlconv = #htmlconv & 0xFFFFFFF7;
        #specialflags2 = #specialflags2 | 0x08000000;
    } else {
        #htmlconv = #htmlconv | 8;
        #specialflags2 = #specialflags2 & 0xF7FFFFFF;
    }
    writeregnum "HtmlConvFlags", #htmlconv;
    writeregnum "SpecialFlags2", #specialflags2;
    closereg;
    #n = dllfunc("EnvChangedDanger");

    #n = dllfunc("Export", $tempmail, "mbox", "log", "", "truncate" );

    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    writeregnum "HtmlConvFlags", #htmlconvPrev;
    writeregnum "SpecialFlags2", #specialflags2Prev;
    closereg;

    if( ! existfile( $tempmail ) ) {
        message "受信ログをエクスポートするのに失敗しました。";
        endmacro;
    }
    runsync2 "turukame.exe /v \"" + $tempmail + "\"";
    #n = dllfunc("Bypass_DeleteFile", $tempmail );

    if( hidemarucount != #hidemarucount + 1 ) {
        message "ウィンドウが出てきてません。";
        endmacro;
    }
    #i = 0;
    while( #i < hidemarucount ) {
        #j = 0;
        while(1) {
            if( #j >= #hidemarucount ) {
                goto Label_Found;
            }
            if( #handle[#j] == hidemaruhandle(#i) ) {
                break;
            }
            #j = #j + 1;
        }
        #i = #i + 1;
    }
    message "ウィンドウが見つかりません。";
    endmacro;

Label_Found:
    setactivehidemaru #hidemaruhandle(#i);
    if( dllfunc("IsHtmlMailViewerVisible") ) {
        #n = sendmessage( hidemaruhandle(0), 0x111, 40336, 0);
    }
    endmacro;

[ ]