|
かわしたです。
以下のマクロでアカウント内のフォルダに散らばった同一スレッド
のメールが抽出できます。ただしスピードに難ありですけど。
# 6000通の中から40通のスレッドを抽出するのに、2分強かかって
# ます(^^; (PenIV 1.7GHz + WinXP)
そんなに長くないスレッドならなんとか使えるのではないでしょう
か。よかったらお使いくださいませ。
--
// PickupThread.mac
// 鶴亀本体でメールを選択して実行してください
$WorkFolder="抽出結果";
$FullPath="受信\\"+$WorkFolder;
loaddll "tkinfo.dll";
if(!dllfunc("IsTuruKameMain")){
message "鶴亀本体で実行してください";
goto EndLine;
}
#copiednum=0;
#setnum=0;
#n=dllfunc("MailType");
if(#n==3 || #n==4){
##n=dllfunc("DisableDraw",1);
disableerrormsg;
$$mid=dllfuncstr("CurrentHeader","Message-ID");
$$cf=dllfuncstr("CurrentFolder");
##itv=dllfunc("IsThreadView");
if(##itv)##n=dllfunc("SetThreadView",0);
##mi=dllfunc("MailIndex");
if($$mid!=""){
if(dllfunc("SelectFolder","",$FullPath )){
question "前回の抽出結果を削除します。よろしいですか?";
if(result==yes){
#n=dllfunc("SetAutoPushTimerMilli", 100, "yes");
#n=dllfunc("DeleteFolder");
}
else{
message "処理を中止します";
goto EndProc;
}
}
#n=dllfunc("SelectFolder","","受信");
#n=dllfunc("MakeFolder",$WorkFolder);
##n=dllfunc("SelectFolder","",$$cf);
##n=dllfunc("SetMailIndex",##mi);
call MainProc;
}
EndProc:
##n=dllfunc("SelectFolder","",$$cf);
##n=dllfunc("SetMailIndex",##mi);
##n=dllfunc("SetThreadView",##itv);
##n=dllfunc("SelectFolder","",$FullPath);
##n=dllfunc("SetThreadView",1);
##n=dllfunc("SetFindPack","(\""+$$mid+"\",target=\"Message-ID:\"),inmail=0");
if(!dllfunc("FindDown")) ##n=dllfunc("FindUp");
enableerrormsg;
##n=dllfunc("EnableDraw");
message str(dllfunc("MailCountAll"))+"件のメールを抽出しました";
}
else{
message "受信メールか送信済みメールを選択して実行して下さい";
}
EndLine:
endmacro;
MainProc:
// 選択中のメール情報退避
$$cf=dllfuncstr("CurrentFolder");
if($$cf=="ゴミ箱") return; //ゴミ箱のメールは処理しない
##itv=dllfunc("IsThreadView");
if(##itv) ##n=dllfunc("SetThreadView",0);
##mi=dllfunc("MailIndex");
$$mid=dllfuncstr("CurrentHeader","Message-ID");
// 該当メールが処理済なら処理しない
##i=0;
while(##i<#copiednum){
if($$mid==$copied[##i]) return;
##i=##i+1;
}
// 結果フォルダにコピー
##n=dllfunc("Copy","",$FullPath);
$copied[#copiednum]=$$mid;
#copiednum=#copiednum+1;
// 返信メールかどうかのチェック
$$tid=dllfuncstr("CurrentHeader","In-Reply-To");
if($$tid==""){
$$tid=dllfuncstr("CurrentHeader","References");
}
// 検索条件の作成
if($$tid=="") $$sfp="(\""+$$mid+"\",target=\"In-Reply-To:\")or(\""+$$mid+"
\",target=\"References:\"),inmail=2";
else{
// 返信元メールIDが処理済みなら検索条件に入れない
##i=0;
while(##i<#copiednum){
if($$tid==$copied[##i]) break;
##i=##i+1;
}
if(##i==#copiednum){
$$sfp="(\""+$$mid+"\",target=\"In-Reply-To:\")or(\""+$$mid+"\",target=
\"References:\")or(\""+$$tid+"\",target=\"Message-ID:\"),inmail=2";
$copied[#copiednum]=$tid;
#copiednum=#copiednum+1;
}
else $$sfp="(\""+$$mid+"\",target=\"In-Reply-To:\")or(\""+$$mid+"\",targ
et=\"References:\"),inmail=2";
}
// 関連メールの検索
##n=dllfunc("SelectFolder","","");
##n=dllfunc("SetFindPack",$$sfp);
while(dllfunc("FindDown")){
call MainProc;
##n=dllfunc("SetFindPack",$$sfp);
}
##n=dllfunc("SelectFolder","",$$cf);
##n=dllfunc("SetMailIndex",##mi);
##n=dllfunc("SetThreadView",##itv);
return;
|
|