|
マクロ作ってみました。Sendフォルダを選択してから実行してもらうマクロにしました。
(なのでフォルダ名が何かは聞かなくても大丈夫でした。失礼しました)
マクロの動作を説明させていただきますと・・・・選択したフォルダの中のメール全部を対象にすると時間がとんでもなくかかると思うので、とりあえず「範囲」を「最近の分」とした時に出てくるメールのみを対象にしました。それで出てくるメールの一番下にあるメールから順番に処理するようにしました。その辺は要望があれば簡単に直せます。
「最近の分」にした一番下のメールから順番に選択して、そのメールの返信元をMessage-Id検索で探して、1通だけ見つかったら、そのメールが既に返信済みフラグONかどうか見て、OFFならONにします。それを繰り返します。0通の場合は何もせず、2通以上あったらマクロを中断します。
---------------------------------------------------------------------------------------------------
loaddll "tkinfo.dll";
if( dllfunc("IsThreadView") ) {
#n = dllfunc("SetThreadView", 0);
}
#viewarea = dllfunc("ViewArea");
if( #viewarea != 1 ) {
#n = dllfunc("SetViewArea", 1); //最近の分のみ対象にする。
}
#i = dllfunc("MailCount") - 1;
if( #i < 0 ) {
//メールなし
} else {
#mailcount_notreply = 0; //返信メールじゃないメール数
#mailcount_reply = 0; //返信メールのトータル数
#mailcount_rootfound = 0; //返信元が見つかったメール数
#maiilcount_rootupdated = 0; //返信元メールのフラグを書き換えた数
while( #i >= 0 ) {
#n = dllfunc("SetMailIndex", #i);
call SetRootMailReply;
#i = #i - 1;
}
if( #maiilcount_rootupdated != 0 ) {
message str(#maiilcount_rootupdated) + " 通のメールを返信済みに書き換えました。";
} else if( #mailcount_rootfound != 0 ) {
message str(#mailcount_rootfound) + " 通の返信元メールを見つけましたが、すべて返信済みフラグがONになっていました。";
}
}
if( #viewarea != 1 ) {
#n = dllfunc("SetViewArea", #viewarea); //範囲を元に戻す。
}
endmacro;
SetRootMailReply:
$$id = dllfuncstr("CurrentHeader", "In-Reply-To");
if( $$id == "" ) {
$$id = dllfuncstr("CurrentHeader", "References");
}
if( $$id == "" ) {
#mailcount_notreply = #mailcount_notreply + 1; //返信メールじゃない
return;
}
#mailcount_reply = #mailcount_reply + 1; //返信メールを見つけた。
if( leftstr( $$id, 1 ) == "<" ) {
$$id = midstr( $$id, 1 );
##x = strstr( $$id, ">" );
if( ##x > 0 ) {
$$id = leftstr( $$id, ##x );
}
}
$$id = dllfuncstr("YenEncode", $$id);
#n = dllfunc("AutoRestoreFindPack");
#n = dllfunc("SetFindPack", "(\"" + $$id + "\",target=person),flag=!send,subfolder=1,inmail=2,messageidtarget=messageid");
#n = dllfunc("DoGrep", "\\CurrentAccount","受信+送信済み+ユーザー");
#n = dllfunc("SetGrepWndTop");
##count = dllfunc("MailCount");
if( ##count == 1 ) {
#mailcount_rootfound = #mailcount_rootfound + 1;
if( dllfunc("GetMailFlag", "reply") == 0 ) {
#n = dllfunc("SetMailFlag", "reply", 1);
#maiilcount_rootupdated = #maiilcount_rootupdated + 1;
}
} else if( ##count > 1 ) {
#mailcount_rootfound = #mailcount_rootfound + 1;
question "返信元メールが複数見つかりました。処理を中断しますか?";
if( result == yes ) {
endmacro;
}
} else {
//message "返信元メールは見つかりませんでした。";
}
#n = dllfunc("SetMainWndTop");
#n = dllfunc("CloseGrepWnd");
return;
|
|