ヘッダをコピーするマクロNo.00243
ながは さん 07/05/07 18:32
 
ながはです。

今回以下のような動作を期待して、自分なりにマクロを記述してみたのですが、うま
く動きません。

どこを修正すればよいか、御教授いただけますでしょうか?

<期待動作>
 ・スレッド表示状態で、親メール以外のあるメールを選択する(手動)
 ・現在選択メールの上位メールのx-memoヘッダの内容を取得する
 ・現在選択メールを編集可能とし、上述のx-memoの内容をセットする
 ・現在選択メールの変更内容をセーブする。


|    loaddll "tkinfo.dll";
|    $prexmemo = dllfuncstr("RootHeader","X-memo:");
|    #n = dllfunc("BeginEditMail");
|    #n = dllfunc("SetHeader","X-memo:",$prexmemo);
|    #n = dllfunc("SaveEditMail",0,0)

これを実行すると、空のx-memoがセットされるだけで、2行目が機能していないよう
な感じがします。

もしかすると、根本的に使用する関数が間違っているのでしょうか?

[ ]
RE:00243 ヘッダをコピーするマクロNo.00244
ながは さん 07/05/07 18:35
 
ながはです。

追記なのですが・・・

当然、コピー元にしようとしている、上位メールにはx-memoヘッダがあるというのが
前提条件です。

><期待動作>
> ・スレッド表示状態で、親メール以外のあるメールを選択する(手動)
> ・現在選択メールの上位メールのx-memoヘッダの内容を取得する
> ・現在選択メールを編集可能とし、上述のx-memoの内容をセットする
> ・現在選択メールの変更内容をセーブする。

[ ]
RE:00243 ヘッダをコピーするマクロNo.00245
アルビレオ さん 07/05/07 19:08
 
ユーザーのアルビレオです。

>|    loaddll "tkinfo.dll";
>|    $prexmemo = dllfuncstr("RootHeader","X-memo:");
>|    #n = dllfunc("BeginEditMail");
>|    #n = dllfunc("SetHeader","X-memo:",$prexmemo);
>|    #n = dllfunc("SaveEditMail",0,0)

試していませんが、ヘルプを見るとどうやら RootHeader の「ヘッダ名」には末
尾のコロンを書かないのが正しいようです。

RootHeader関数のパラメータ1
>検索したいヘッダです。"Subject"のように、名前のみを指定します。


あと、こういう場合は3行目あたりに
 message $prexmemo;
を追加して変数内容を確認すると、おかしいのはヘッダ読み込みなのか書き込み
なのか原因を絞り込めます。
マクロ書きの基本テクニックなので活用してください(^o^)

[ ]
RE:00244 ヘッダをコピーするマクロNo.00246
capa さん 07/05/07 19:32
 
capaです。

ながはさんの目的では RootHeader にて上位メールのヘッダを取得する
ことはできないはずです。

-- RootHeaderのヘルプより
 これらの関数は返信メールまたは転送メールコマンドで表示されたエ
ディタ・ウィンドウの中でのみ有効です。
--

上位メールのヘッダを取得するためには

・スレッド表示のメール一覧枠で左矢印キーをシミュレートする
・選択中のメールの In-Reply-To を取得し「Message-Id検索」する

等の処理が必要でしょう。

[ ]
RE:00246 ヘッダをコピーするマクロNo.00247
ながは さん 07/05/07 19:45
 
ながはです。capaさん早速のコメントありがとうございます。

>ながはさんの目的では RootHeader にて上位メールのヘッダを取得する
>ことはできないはずです。

そうですか・・・もう少し研究してみます。

[ ]
RE:00245 ヘッダをコピーするマクロNo.00248
ながは さん 07/05/07 19:47
 
ながはです。アルビレオさんコメントありがとうございます。


>あと、こういう場合は3行目あたりに
> message $prexmemo;
>を追加して変数内容を確認すると、おかしいのはヘッダ読み込みなのか書き込み
>なのか原因を絞り込めます。

なるほど・・・使わせていただきます。


[ ]
RE:00247 ヘッダをコピーするマクロNo.00249
K'zawa さん 07/05/07 20:15
 
ながはさん、こんにちは。
K'zawa/ユーザーです。

1.書き換えるメールが受信メールなら、sendフラグをONにする。
2loadrootmail関数で読み取り側のメールをロード。
3.目的の処理をする。
4.1で書き換えたときは元に戻す。
5.保存して終了

とすれば出来ると思います。

[ ]
RE:00249 ヘッダをコピーするマクロNo.00250
ながは さん 07/05/07 22:24
 
ながはです。K'zawaさん、コメントありがとうございます。

>1.書き換えるメールが受信メールなら、sendフラグをONにする。
>2loadrootmail関数で読み取り側のメールをロード。
>3.目的の処理をする。
>4.1で書き換えたときは元に戻す。
>5.保存して終了

と、いうふうに作ってみたら、最低限自分がやりたいことは実現できました。
アドバイスありがとうございました。

ちなみに、こんなふうにしてみました。
|   loaddll "tkinfo.dll";
|    #n = dllfunc("GetMailFlag","send");
|    if( #n == 0 ) #n = dllfunc("SetMailFlag","send",1);
|    #n = dllfunc("LoadRootMail");
|    $prexmemo = dllfuncstr("RootHeader","X-memo:");
|    #n = dllfunc("BeginEditMail");
|    #n = dllfunc("SetHeader","X-memo:",$prexmemo);
|    #n = dllfunc("SaveEditMail",0,0);
|   #n = dllfunc("GetMailFlag","send");
|    if( #n == 1 ) #n = dllfunc("SetMailFlag","send",0);

[ ]
RE:00250 ヘッダをコピーするマクロNo.00251
アルビレオ さん 07/05/07 23:58
 
アルビレオです。

>loaddll "tkinfo.dll";
>#n = dllfunc("GetMailFlag","send");
>if( #n == 0 ) #n = dllfunc("SetMailFlag","send",1);
↑これで必ず send は 1 になるから…
>#n = dllfunc("LoadRootMail");
>$prexmemo = dllfuncstr("RootHeader","X-memo:");
>#n = dllfunc("BeginEditMail");
>#n = dllfunc("SetHeader","X-memo:",$prexmemo);
>#n = dllfunc("SaveEditMail",0,0);
>#n = dllfunc("GetMailFlag","send");
>if( #n == 1 ) #n = dllfunc("SetMailFlag","send",0);
↑ここでは必ず send は 0 になります。


#send = dllfunc("GetMailFlag","send");//本来のsendを取得
#n = dllfunc("SetMailFlag","send",1);//一時的にsendを1
#n = dllfunc("LoadRootMail");
$prexmemo = dllfuncstr("RootHeader","X-memo:");
#n = dllfunc("BeginEditMail");
#n = dllfunc("SetHeader","X-memo:",$prexmemo);
#n = dllfunc("SaveEditMail",0,0);
#n = dllfunc("SetMailFlag","send",#send);//本来の状態に戻す

こんな感じでいいんじゃないでしょうか。

[ ]
RE:00251 ヘッダをコピーするマクロNo.00252
ながは さん 07/05/08 09:58
 
ながはです。
アルビレオさん、コメントありがとうございます。

>#send = dllfunc("GetMailFlag","send");//本来のsendを取得
>#n = dllfunc("SetMailFlag","send",1);//一時的にsendを1
>#n = dllfunc("LoadRootMail");
>$prexmemo = dllfuncstr("RootHeader","X-memo:");
>#n = dllfunc("BeginEditMail");
>#n = dllfunc("SetHeader","X-memo:",$prexmemo);
>#n = dllfunc("SaveEditMail",0,0);
>#n = dllfunc("SetMailFlag","send",#send);//本来の状態に戻す
>
>こんな感じでいいんじゃないでしょうか。

なるほど・・・勉強になります。どうもありがとうございました。

[ ]