|
1つ是正させていただきます。
> − IMAP4サーバーの返すフォルダ一覧でのINBOXの並び順が先頭以外だと、
> これまた秀丸メールが誤動作する。
これは僕の勘違いでした。
で、肝心のメールの並び順ですが、
> 同期のときの移動処理をDate順に行うようにするとフォルダ内の順番が変わったりし
> ないでしょうか。
> ログを見てみましたが、現在はCOPYをUIDL順に行っているので同期ごとにしか順番が
> 入れ替わらないということだと認識しています。
秀丸メールがメールサーバーにCOPYを指示する順序は、一応、秀丸メール上で
メールの移動/コピーを指示した順序になります。ただ、実際それでテストして
も、メールサーバー上で秀丸メールが指示した順序になるかというと、たしかに
1回1回受信(=同期)させればそうなるんですが、複数メール移動してから受
信した場合はダメでした。
実は、IMAP4サーバーにメールの移動/コピーを指示する場合、
UID COPY (UID番号) "(フォルダ名)"
みたいなコマンドを連続して送って、最後に
EXPUNGE
ってコマンドで確定させる仕組みなんですが、EXPUNGEを送ったタイミングで、
それまでCOPY指示したメールは自動的にDate:ヘッダ順か何かでソートされてし
まうようです。(Yahoo!メールでテストした場合は)
なので、しいてうまく「UID COPY」コマンドで指示した通りに並んでくれるた
めには、1回のUID COPYの度に1回ずつEXPUNGEコマンドを送ってやるしか無い
ようです。ですが、そういうことは秀丸メールでは出来ないです。
なので、やはり「1通移動して同期して…」を全メールの数だけ繰り返すしか
無いように思います。
マクロを使えば出来ますけど、それでダメでしょうか。とりあえずマクロを実
行開始してあとは放置しておくってことで、メールサーバーさんには負荷がかか
るかもしれませんが、秀丸メール上で表示してる通りの並び順に、メールサー
バー上のメールも並べ替えることが出来ると思います。
■マクロの例:
移動元フォルダ = アカウント直下の"テスト"フォルダ
移動先フォルダ = 受信だとすると、
loaddll "tkinfo.dll";
#n = dllfunc("SelectFolder", "", "User\\テスト" );
if( #n == 0 ) {
message "テストフォルダの選択に失敗しました。";
endmacro;
}
Loop:
#n = dllfunc("MailCount");
if( #n == 0 ) {
message "テストフォルダのメールはすべて移動しました。";
endmacro;
}
#n = dllfunc("SetMailIndex", 0 );
#n = dllfunc("DisableThreadTreeOperation");
#n = dllfunc("Move", "", "受信");
#n = dllfunc("Receive");
#n = dllfunc("TransmitError");
if( #n != 0 ) {
message "受信でエラーが起きました。マクロを中断します。";
endmacro;
}
goto Loop;
|
|