HTMLパートをまとめて削除したいNo.03335
カンポ さん 18/05/04 08:52
 
あるフォルダにHTMLメールがたくさんあるのですが、HTMLである必要性がないものば
かりで、HTMLパートを一括削除する方法があれば知りたいのですが…。
一つ一つやるのは気が遠くなりそうです。(汗)

[ ]
RE:03335 HTMLパートをまとめて削除したいNo.03344
秀まるお2 さん 18/05/04 16:39
 
 エクスプローラを使って、秀丸メールのデータ用フォルダ配下のアカウント用フォ
ルダ配下にある

 「受信HTML」

 ってフォルダの、さらにその配下にある多数のフォルダを全部削除してしまうと、
そのアカウント配下のHTMLメールは全部無くなります。

 それでどうでしょうか。

 それとも、特定のメールのHTML部分だけ削除したいってことでしたら、それ用のマ
クロを作って差し上げることは出来ます。

[ ]
RE:03344 HTMLパートをまとめて削除したいNo.03346
カンポ さん 18/05/04 19:43
 
たくさんあるのですが、さすがに全部ではないので、秀丸メール上で選択した複数の
メールのHTML削除ができたらと思っていました。

> それとも、特定のメールのHTML部分だけ削除したいってことでしたら、それ用の
>マクロを作って差し上げることは出来ます。

上記のようなことが可能なマクロということであれば是非ともお願いしたいです。お
手数をお掛けしてしまい恐縮ですが・・・。m(_ _)m

要望としては、いちいち「削除するよ、いいですか?」みたいな確認ダイアログはす
っ飛ばして一括処理できれば最高です。もちろんそこは自己責任であることは理解し
ています。

もう一つ、編集済みアイコン(鉛筆マーク)の付加についても私は要らないと考えて
いるのですが、もしかして、他の人がそのマクロを使いたいと思ったときにアイコン
付けたい場合もあるかもしれないので、それもマクロ内で指定できたら最高です。

確認ダイアログの有無もマクロ内で指定できる方がいいのかもしれませんね。私自身
は不要ですが…。

さすがにこれらオプション選択のためにダイアログまで出す必要はないと考えていま
す。マクロをちょっと編集するだけで済むのであればそれで十分です。

勝手に書いてきましたが、可能でしたらどうかよろしくお願いします。

[ ]
RE:03346 HTMLパートをまとめて削除したいNo.03356
秀まるお2 さん 18/05/06 18:21
 
 マクロ作ってみました。

 確認メッセージは1回だけ出ますが、不要であれば、「question ..」からの5行
をすべて削除すればいいです。

 万が一間違えてマクロ実行して、削除したHTMLメール部分を復活させたいとしたら、
「受信解析のやり直し」を実行する方法があります。最近のメール(2ヶ月程度文)
であれば復活可能です。

-----------------------------------------------------------------------
HTMLメールのHTML部分を削除するマクロ(選択したメール対象)
-----------------------------------------------------------------------
    loaddll "tkinfo.dll";
    #n = dllfunc("SetJapaneseCodePageMode");
    #count = dllfunc("SelectedMailCount");
    if( #count == 0 ) {
        message "メールを選択してから実行してください。";
        endmacro;
    }
    question "現在選択してるメール(" + str(#count) + "通)のHTMLメール部分を
すべて削除します。元に戻すことは出来ません。よろしいですか?";
    if( result != yes ) {
        endmacro;
    }
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        $html = dllfuncstr("CurrentHeader", "X-Html");
        if( $html != "" ) {
            #n = dllfunc("DeleteAttach", dllfuncstr("CurrentHeader", "X-Htm
l:"), 0);
        }
    }
    #n = dllfunc("UnlockSelection", 1);

[ ]
RE:03356 HTMLパートをまとめて削除したいNo.03357
カンポ さん 18/05/06 22:00
 
> マクロ作ってみました。

ありがとうございます。

で、早速使ってみたところ、本文横のhtmlのアイコン(うちだとfirefoxですが)が
バッテン付きのものに変わるだけで、その部分そのものは消えないようです。

私がやりたいと思っていたのとは違っていました。

通常、HTML部分を選択してDeleteキーを押すと、削除に関するちょっとしたオプショ
ンダイアログが出ます。私の場合は3つ目のオプションを選択してあって、改変マー
クは付けないようにしています。

そこでOKを押すと、本文の横のHTMLそのものが消え去って、あたかもテキストメール
を受け取ったかのようになります。

そういうマクロは難しいでしょうか。何か面倒くさそうな気もしますが。
削除に関するオプションダイアログについて全く触れていなかったことは申し訳あり
ませんでした。私の頭の中ではOKボタン押すだけだったのでうっかりしていましたが、
第三者だと当然その部分の情報も必要だと今さらながら気付きました。

あと、確認したいことがあります。この手動での削除時にはそのhtml(普通はindex.h
tml)があったフォルダも消えて無くなるのですが、マクロでも同じようにフォルダ削
除まで可能でしょうか? あるいはそのあたりはindex.html削除と度同時に自動的に消
えるようになっているのかもしれませんが…。

お手数をお掛けしてしまい恐縮ですが、もし、こんなわがままも可能ならばよろしく
お願いします。無理なら諦めようと思います。

[ ]
RE:03357 HTMLパートをまとめて削除したいNo.03358
秀まるお2 さん 18/05/07 09:11
 
 「HTMLメール」のアイコンも消したい場合は、DeleteAttach関数呼び出しの第2パ
ラメータを数値の1にすればいいです。

 あと、DisableDrawで画面描画をしないようにしてみました。他、バグも1つあり
まして、直しました。

> あと、確認したいことがあります。この手動での削除時にはそのhtml(普通はindex.
>html)があったフォルダも消えて無くなるのですが、マクロでも同じようにフォルダ
>削除まで可能でしょうか? あるいはそのあたりはindex.html削除と度同時に自動的
>に消えるようになっているのかもしれませんが…。

 フォルダごとなくなります。

-----------------------------------------------------------------------
HTMLメールのHTML部分を削除するマクロ(選択したメール対象)
-----------------------------------------------------------------------
    loaddll "tkinfo.dll";
    #n = dllfunc("SetJapaneseCodePageMode", 1);
    #count = dllfunc("SelectedMailCount");
    if( #count == 0 ) {
        message "メールを選択してから実行してください。";
        endmacro;
    }
    question "現在選択してるメール(" + str(#count) + "通)のHTMLメール部分を
すべて削除します。元に戻すことは出来ません。よろしいですか?";
    if( result != yes ) {
        endmacro;
    }
    #n = dllfunc("DisableDraw");
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        $html = dllfuncstr("CurrentHeader", "X-Html");
        if( $html != "" ) {
            #n = dllfunc("DeleteAttach", $html, 1);
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    #n = dllfunc("EnableDraw");

[ ]
RE:03358 HTMLパートをまとめて削除したいNo.03359
カンポ さん 18/05/07 10:33
 
ありがとうございます!!

ウザいヤツと思われそうですが、もう一度だけ。
マクロでは改変マークを付けないようにすることは不可能でしょうか?
マクロヘルプも見てみましたが、見つけられませんでした。

ところで、DeleteAttach関数のパラメータ2を2にしてみたら、ヘルプでは X-DelAtta
ch ヘッダに改変するという記述がありますが、html削除の場合は X-DelHTML ヘッダ
になっているのを確認しました。


[ ]
RE:03359 HTMLパートをまとめて削除したいNo.03361
秀まるお2 さん 18/05/07 11:12
 
 改変マークが付いてしまうのは・・・・DeleteAttachがそういう仕様になってるみ
たいでした。

 マクロ改良してみました。SetMailFlagでフラグを0にしています。


    loaddll "tkinfo.dll";
    #n = dllfunc("SetJapaneseCodePageMode", 1);
    #count = dllfunc("SelectedMailCount");
    if( #count == 0 ) {
        message "メールを選択してから実行してください。";
        endmacro;
    }
    question "現在選択してるメール(" + str(#count) + "通)のHTMLメール部分を
すべて削除します。元に戻すことは出来ません。よろしいですか?";
    if( result != yes ) {
        endmacro;
    }
    #n = dllfunc("DisableDraw");
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        $html = dllfuncstr("CurrentHeader", "X-Html");
        if( $html != "" ) {
            #n = dllfunc("DeleteAttach", $html, 1);
            #n = dllfunc("SetMailFlag", "altered", 0);
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    #n = dllfunc("EnableDraw");

[ ]
RE:03361 HTMLパートをまとめて削除したいNo.03365
カンポ さん 18/05/07 19:19
 
素晴らしい。完璧です!!
ありがとうございます。
願い通りの動作になりました。m(_ _)m

[ ]
RE:03365 HTMLパートをまとめて削除したいNo.03367
カンポ さん 18/05/08 03:06
 
>素晴らしい。完璧です!!

と思ったのですが、残念ながら不具合が出ました。

HTMLパートを削除した後に、リストビューのメール件名が文字化けしてしまうメール
があります。
それは欧文エンコードのもので、アクセント記号付きのスペイン語やポルトガル語な
ど独特の文字が使われている場合です。
UTF-8エンコードの場合はHTML削除してもそれらの文字も問題ありません。
他にも何か条件があるかもしれませんが、今私が確認できる限りではそんな感じの条
件下で起きています。

解決策はあるでしょうか?

[ ]
RE:03367 HTMLパートをまとめて削除したいNo.03369
秀まるお2 さん 18/05/08 09:47
 
 すみません。こちらでも再現しました。秀丸メール側のバグのようです。

 SetJapaneseCodePageMode呼び出ししてると起きるようで、これをコメントアウト
したらおかしくならないようでした。

 マクロの動作上も、とりあえず問題なさそうです。

 一回化けてしまったメールは元に戻らないようです。すみません。こんな落とし穴
があるとは知らず・・・。

---------------------------------------------------
直したマクロ
---------------------------------------------------
    loaddll "tkinfo.dll";
//
//コメントアウト
//  #n = dllfunc("SetJapaneseCodePageMode", 1);
//
    #count = dllfunc("SelectedMailCount");
    if( #count == 0 ) {
        message "メールを選択してから実行してください。";
        endmacro;
    }
    question "現在選択してるメール(" + str(#count) + "通)のHTMLメール部分を
すべて削除します。元に戻すことは出来ません。よろしいですか?";
    if( result != yes ) {
        endmacro;
    }
    #n = dllfunc("DisableDraw");
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        $html = dllfuncstr("CurrentHeader", "X-Html");
        if( $html != "" ) {
            #n = dllfunc("DeleteAttach", $html, 1);
            #n = dllfunc("SetMailFlag", "altered", 0);
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    #n = dllfunc("EnableDraw");

[ ]
RE:03369 HTMLパートをまとめて削除したいNo.03371
カンポ さん 18/05/08 10:42
 
> SetJapaneseCodePageMode呼び出ししてると起きるようで、これをコメントアウト
>したらおかしくならないようでした。

確かにこの1行をコメントアウトしたら問題は起きないようです。
ありがとうございました。

[ ]
RE:03371 HTMLパートをまとめて削除したいNo.03372
秀まるお2 さん 18/05/08 11:53
 
 SetJapaneseCodePageModeしたままDeleteAttachして欧文文字が化けるバグ修正は、
それはそれでまた次のβ版にて対応させていただきます。

[ ]