[質問]DeleteAttachについてNo.26811
プックン さん 06/03/17 00:47
 
こんばんわ。秀まるお様

秀丸メール本体から下記マクロを実行すると、

(1)添付ファイルを削除するのみの場合は0
(2)添付ファイルを削除し、メール中の該当するX-Attach:ヘッダをいっしょに削除し
たい場合は1
(3)メール中のX-Attach:ヘッダをX-DelAttach:ヘッダに改変させたい場合は2

(1)は正常
(2)は、添付ファイルは削除されるがX-Attachヘッダは削除されない。
(3)は、添付ファイルは削除されるがX-Attachヘッダが変更されない。
という症状です。

DeleteAttachのコマンドは、エディタ上で実行すると説明どおりの動作に
なりました。

秀丸メール本体から実行したDeleteAttachは、パラメータ2の設定に関係なく
添付ファイルが削除されるだけの動作なのでしょうか?
よろしくお願いします。

動作環境
    OS:Win2K
    秀丸メール:Ver4.63

//---------------------sample macro
    call HidemaruMail ;
   
    ##n = dllfunc("IsHidemaruMailMain") ;
    call Res_check ##n , "秀丸メール本体でないです\n" ;

    ##n = dllfunc("BeginEditMail");
    call Res_check ##n , "編集を許可に失敗しました\n" ;
    //添付ファイルを削除するのみの場合は0
    //添付ファイルを削除し、メール中の該当するX-Attach:ヘッダをいっしょに削
除したい場合は1
    //メール中のX-Attach:ヘッダをX-DelAttach:ヘッダに改変させたい場合は2

    $$a[0] = "(&0)添付ファイルを削除するのみ" ;
    $$a[1] = "(&1)添付ファイルを削除し、メール中の該当するX-Attach:ヘッダを
いっしょに削除" ;
    $$a[2] = "(&2)メール中のX-Attach:ヘッダをX-DelAttach:ヘッダに改変" ;
    menuarray $$a, 3;
    if( result == 0 ) {
        goto LEND ;
    }
    else {
        ##sel = result -1 ;
    }
    ##n = dllfunc("DeleteAttach", dllfuncstr("CurrentHeader", "X-Attach"), #
#sel);
    call Res_check ##n , "添付ファイル削除に失敗しました\n" ;
    ##n = dllfunc("SaveEditMail", 0, 0 );
    call Res_check ##n , "Mailの保存に失敗しました\n" ;

LEND:
    freedll;
    endmacro;

HidemaruMail:   //秀丸メール起動チェック&DLLロード
//機能:TKInfo.dllをロードする
    // DLL を Load する
    openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
    ##res = result ;
    closereg ;
    if( !##res ) {
        message "秀丸メールがインストールされてないです (^^;)\n"+$info;
        endmacro;
    }

    loaddll "TKInfo.dll";
    if( !result ) {
        message "DLLロードに失敗\n"+$info;
        endmacro;
    }
return ;

Res_check:
//処理:処理の判定&メッセージ表示
    //引数渡し
    ##num = ##1;    $$mes = $$2 ;
    if(##num != 1){
        message $$mes ;
        goto LEND;
    }
return ;


[ ]
RE:26811 [質問]DeleteAttachについてNo.26813
秀まるお2 さん 06/03/17 09:54
 
 BeginEditMail/SaveEditMailの間にDeleteAttachを入れてしまうとダメみたい
です。DeleteAttachだけ単独実行するようにマクロを直して欲しいです。

 それか、DeleteAttachした場合はCancelEditMailしてやるかだと思います。

[ ]
RE:26813 [質問]DeleteAttachについてNo.26822
プックン さん 06/03/18 00:21
 
BeginEditMailの制限事項に書き内容がかいていました。
>秀丸メール本体上でBeginEditMail等を使ってメールのヘッダ部分を書き換える場合、
>SetHeader、SetHeader2、AddHeader、DeleteHeaderの4種類のヘッダ書き換え関数を
>使ってのみ書き換えが可能です。

DeleteAttachを実施してもだめだったんですね。

教えて頂いたように、DeleteAttachした後にCancelEditMailを実施すると
秀丸メール本体でのマクロでうまく添付ファイルを削除できました。
CancelEditMailを指定するとなぜ期待通りに動作するのか理解できませんでしたが
私の期待通りの動作になりました。

ご指導ありがとうございました。

制限事項に記述されているように、DeleteAttachは対応してないので
とりあえずBeginEditMailではなくOpenMailでエディタ上で処理することにしました。

下記は、CancelEditMailで実施したマクロ
//-----------------------------------
    loaddll "TKInfo.dll";

    ##n = dllfunc("BeginEditMail");
    call Res_check ##n , "編集を許可に失敗しました\n" ;
    //添付ファイルを削除するのみの場合は0
    //添付ファイルを削除し、メール中の該当するX-Attach:ヘッダをいっしょに削
除したい場合は1
    //メール中のX-Attach:ヘッダをX-DelAttach:ヘッダに改変させたい場合は2

    $$a[0] = "(&0)添付ファイルを削除するのみ" ;
    $$a[1] = "(&1)添付ファイルを削除し、メール中の該当するX-Attach:ヘッダを
いっしょに削除" ;
    $$a[2] = "(&2)メール中のX-Attach:ヘッダをX-DelAttach:ヘッダに改変" ;
    menuarray $$a, 3;
    if( result == 0 ) {
        goto LEND ;
    }
    else {
        ##sel = result -1 ;
    }
   
    ##n = dllfunc("DeleteAttach", dllfuncstr("CurrentHeader", "X-Attach"), #
#sel);
    call Res_check ##n , "添付ファイル削除に失敗しました\n" ;
    ##n=dllfunc("CancelEditMail");
    //BeginEditMailを呼んだけれども保存したくなかった場合に呼び出すための関
数です。

LEND:
    freedll;
    endmacro;

Res_check:
//処理:処理の判定&メッセージ表示
    //引数渡し
    ##num = ##1;    $$mes = $$2 ;
    if(##num != 1){
        message $$mes ;
        goto LEND;
    }
return ;


[ ]