Re:で始まるメールを無理矢理連結する候補No.48783
hajimet さん 15/11/09 02:33
 
いつも秀丸メール便利に活用させて頂いております
さて
掲題につき

(背景1)
In-Reply-To:ヘッダがある場合は、
振り分け設定で、優先順位最下位に「フォルダへ移動」の所に
「\((スレッドの親メールと同じフォルダ)」を指定して、
振り分けコマンド時のみ有効、として、
「受信」フォルダで新着を閲覧後に振り分けコマンドを実行して、
各関連フォルダに移動させて保存しています。

(背景2)
類似の操作を、In-Reply-To:ヘッダが無いメールに対しても
行いたいのですが、連結先候補が複数出現する可能性が有り、
確認してから、移動する、というワークフローが期待されます。

そこでとりあえず、
Re:で始まるメールを無理矢理連結する候補先の検索方法を考えました。
候補先を特定するための検索設定は、内部的にあるのかと思います。
その設定値を関数なりで取り出せると便利かと思いましたが、
とりあえず、ヘルプを参考に頑張って文字列編集のマクロを組んでみました。

以下の点で請助言;
1)文字列操作のための新規エディタでの処理をステルス化出来ないか。
2)文字列操作は正しいか(内部処理とほぼ同一か)。
3)「移動先候補フォルダ名の取得→移動」まで半自動化できないか。
  たとえば、第一候補を表示して、移動して良いか問いあわせる、など。

以下マクロ(案)
loaddll "TKInfo.dll";
$Subject = dllfuncstr("CurrentHeader", "Subject:");
//以下ヘルプを参考に作成
#n = dllfunc("NewMail");
#headerView = dllfunc("HeaderView");
#n = dllfunc("SwitchHeaderView", 0);
    selectall
    delete
    insert $Subject;
clearupdated
    replaceall "\\[.+\\]", "", regular;
    replaceall "re:", "";
    replaceall "fw:", "";
    replaceall "^ +", "", regular;
if( updated ) {
    selectall
    cut
    beginclipboardread;
    $Subject = getclipboard;
}
#n = dllfunc("SwitchHeaderView", #headerView);
#TempWnd = hidemaruhandle(0);  
#n = dllfunc( "SetMainWndTop" ); //本体に移動
closehidemaruforced #TempWnd;
// Grep実行(SetFindPackのパラメタの指定が難しい)
#n = dllfunc("SetFindPack", "(\""+$Subject+"\", target=subject), inmail=2");
#n = dllfunc("DoGrep2", "\\CurrentAccount", "", 1);
endmacro;

[ ]
RE:48783 Re:で始まるメールを無理矢理連No.48788
秀まるお2 さん 15/11/09 14:03
 
> 1)文字列操作のための新規エディタでの処理をステルス化出来ないか。

 新規エディタをステルス化するのは現状出来ないのですが、代わりに、一時的
な文字列の編集作業を秀丸メール本体ウィンドウ上で実行する作戦がお勧めです。

 具体的には、メール本文の内容を変数にバックアップした上で、
readonlyswitch, browsemodeswitchしてから適当に編集して、最後に元に戻す、
みたいな感じの処理になります。

 それと、「Re:」で始まってるけどIn-Reply-To:ヘッダの無いメールも無理矢
理振り分ける対応は…。やろうと思えば出来なくもないとは思うんですが、かな
り大変だし、精度の問題も出そうな気がします。対応するの難しいそうです。

-----------------サンプルマクロ-----------------------------
    loaddll "tkinfo.dll";
    $subject = dllfuncstr("CurrentHeader", "Subject");
    #readonly = readonly;
    #browsemode = browsemode;
    if( #readonly ) {
        readonlyswitch;
    }
    if( #browsemode ) {
        browsemodeswitch;
    }
    gofiletop;
    beginsel;
    gofileend;
    $prevtext = gettext( seltopx, seltopy, selendx, selendy, 1 );
    delete;
    insert $subject;
    gofiletop;
    replaceall "\\[.+\\]", "", regular;
    replaceall "re:", "";
    replaceall "fw:", "";
    replaceall "^ +", "", regular;
    gofiletop;
    beginsel;
    golineend2;
    $subject = gettext( seltopx, seltopy, selendx, selendy );
    message $subject;
    gofiletop;
    beginsel;
    gofileend;
    delete;
    insertfix $prevtext;
    if( #readonly ) {
        readonlyswitch;
    }
    if( #browsemode ) {
        browsemodeswitch;
    }

[ ]
RE:48788 Re:で始まるメールを無理矢理連No.48858
hajimet さん 15/11/24 22:59
 
ありがとうございました。
テキスト処理の定石的な仕方については、お勧めのものでしたら、
ひな形としてヘルプに記載されていてもいいかな、と思いました。

文字列の変換の部分については

    replaceall "\\[.+\\]", "", regular;
    replaceall "re: ", "";
    replaceall "fw: ", "";
    replaceall "fwd: ", "";

といった形で運用中です。
ときどきヒットしない事例にも当たりますが
#たとえばもともとの件名に"[・・・]"というスタイルの表記を用いている場合
うまい方法が思いつきませんで、そのままにしてます。

[ ]