|
マクロ作成大変ありがたく存じます。
Iranoanさんの最初のご提案のように、
なんどかアカウントを切り替えないと
当初の目的が達成できないことがわかりました。
その部分含め幾箇所か修正して使っています。
エントリの削除に時間がかかるようで、
削除が終わる前にマクロが進行してしまうと、
エントリナンバーに「ズレ」が生じて、
処理漏れが起こるの難点がありますので、
何度か繰り返し、マクロを実行する必要があります。
一部描画を抑制していますが、
これで、ある程度進捗がモニタできます。
#描画抑制しないと画面が散乱して、
進捗が目視できなくなってしまいます。
反復処理終了の出口に、受信ログ、送信ログを使っているようですが、
表示を抑制していてもこれで上手く行くんでしょうか。
何となく、無限ループに嵌ったようになることもあるのですが、
それは、マクロのせいではないのかも知れませんし・・・・
$account1 = "アカウント名1";//削除される方
$account2 = "アカウント名2";//残される方
loaddll "tkinfo.dll";
#n = dllfunc("SelectFolder", $account1, "");
#deletecount = 0;
while(1) {
$next = dllfuncstr("GetNextFolder", "", "");
$nextfolderaccout = leftstr( $next, strstr( $next, "\\" ) );
if( $nextfolderaccout != $account1 ) {
break;
}
$nextfolder = midstr( $next, strstr( $next, "\\" ) + 1, );
if( $nextfolder == "受信ログ"
|| $nextfolder == "送信ログ" ) {
break;
}
#n = dllfunc("SelectFolder", $account1, $nextfolder);
if( dllfunc("ViewArea") != 0 ) {
#n = dllfunc("SetViewArea", 0);
}
if( dllfunc("IsThreadView") ) {
#n = dllfunc("SetThreadView", 0);
}
#count = dllfunc("MailCount");
#i = 0;
while( #i < #count ) {
#n = dllfunc("SetMailIndex", #i);
#n = dllfunc("DisableDraw", 0);
$messageid = dllfuncstr("CurrentHeader", "Message-Id");
if( leftstr($messageid, 1) == "<"
&& rightstr($messageid, 1) == ">" ) {
$messageid = midstr( $messageid, 1, strlen($messageid) - 2 );
}
if( $messageid != "" ) {
$messageid = dllfuncstr("YenEncode", $messageid);
#n = dllfunc("SelectFolder", $account2, "");
#n = dllfunc("SetFindPack", "(\"" + $messageid + "\", casese
nse, word, target=person), messageidtarget=messageid, inmail=2");
#n = dllfunc("FindDownInclude");
if( #n == 1 ) {
#n = dllfunc("SelectFolder", $account1, "");
#n = dllfunc("SetFindPack", "(\"" + $messageid + "\", ca
sesense, word, target=person), messageidtarget=messageid, inmail=2");
#n = dllfunc("FindDownInclude");
if( #n == 1 ) {
#n = dllfunc( "Delete", 1 );
#deletecount = #deletecount + 1;
} else {
message "元のメールの位置への復帰に失敗しました";
}
}
#n = dllfunc("SelectFolder", $account1, $nextfolder);
#n = dllfunc("EnableDraw");
}
#i = #i + 1;
}
}
message str(#deletecount) + " 通のメールを削除しました。";
|
|