マクロでメール検索してメモをつける方法No.42355
Kamataro さん 12/03/03 01:17
 
Kamataroと申します。

”受信が一段落した時”の自動実行マクロで、受信したメールのタイトルの中に指定
文字列があるか調べ、あった場合、そのメールにメモを付けたいと考えています。

いろいろと調べて、
メールを検索→検索一覧画面を表示して、その中で選択されているメールのヘッダを
書き換える、という処理で以下のマクロを組んでみたのですが、メモが付いたのは検
索されたメールではなくて、まったく関係ない秀丸メール本体側の一覧画面上で選択
されているメールでした。

何かよい方法はないでしょうか?

loaddll "TKInfo.dll";
#n = dllfunc("SetFindPack", "(\"指定文字列\", target=all), inmail=0" );
#n = dllfunc("StartDoGrep", "", "");
#n = dllfunc("SetHeaderForMultiSelect", "X-Memo:", "メモメモ");
endmacro;

[ ]
RE:42355 マクロでメール検索してメモをつNo.42356
Kamataro さん 12/03/03 01:35
 
追記です:
メール検索してメモを付けるといった機能は振り分け設定でも可能なのですが、検索
する指定文字列が動的に変わるため、マクロで実装しようと考えました。(指定文字
列は別途用意するiniファイルなどから取得する予定)
以上、よろしくお願いします。

[ ]
RE:42355 マクロでメール検索してメモをつNo.42360
Iranoan さん 12/03/03 18:58
 
 Kamataro さん今日は、一ユーザの Iranoan です。
> #n = dllfunc("SetFindPack", "(\"指定文字列\", target=all), inmail=0" );
flag=unread&!send&transmit=メーラー起動時-指定なし
も追加した方が良いと思います。ただどちらにしても、直前に受信したメール
に限定する方法はないでしょうね。
 加えて、「追加するメモを含まない」も条件にすると、効率的かと。
> #n = dllfunc("StartDoGrep", "", "");
 この方法は、該当するメールが無かった時の対処法がないので、FindDown
関数などに置き換えないとダメな気がします。
 ##IsGrepWndBrowseMode 関数を使えば、出来るのかなあ〜。どちらにしても、
ヘルプに
>  検索結果の一覧上で動作するコマンドは以下の通りです。
>
>  上のメール/下のメール、上の未読メール/下の未読メール、
>  上のページ/下のページ、上の未読ページ、下の未読ページ、
>  NextPrevCustom関数。
と有るので、一覧上ではヘッダの書き換えは出来ないと思います。
 またメールを選択した時点で、設定によっては既読に切り替えてしまう事が
あり、その対処も必要でしょう。

[ ]
RE:42356 マクロでメール検索してメモをつNo.42361
秀まるお2 さん 12/03/03 19:06
 
 DoGrepした結果ウィンドウにマクロの動作を移動させる(setactivehidemaru
相当のことをさせる)ことは、すみませんが現状出来ないです。

 マクロでやるとしたら、FindDownを使ってメールを検索してやって、見つかっ
た物から順番にメモの書き込みをするって形でやるしか無いと思います。

例:特定アカウント配下でメモ付けする場合

    loaddll "tkinfo.dll";
    #n = dllfunc("SelectFolder", dllfuncstr("CurrentAccount"), "");
    #n = dllfunc("SetFindPack"
           , "(\"test\",target=subject), subfolder=1, inmail=2");
    while(1) {
        #n = dllfunc("FindDown");
        if( #n == 0 ) {
            break;
        }
        #n = dllfunc("BeginEditMail");
        #n = dllfunc("SetHeader", "X-Memo", "テスト");
        #n = dllfunc("SaveEditMail", 0, 0);
    }

[ ]
RE:42361 マクロでメール検索してメモをつNo.42365
秀まるお2 さん 12/03/03 21:19
 
 別の作戦でも出来ました。検索フォルダを一時的に作成して、そこでメモを付
けて、最後に検索フォルダを削除します。

 こっちの方が高速でした。

    loaddll "tkinfo.dll";
    #n = dllfunc("SelectFolder", dllfuncstr("CurrentAccount"), "受信");
    #n = dllfunc("MakeGrepFolder", "$$$test"
                , "(\"test\", target=subject), subfolder=1, inmail=2"
                , "\\CurrentAccount," );
    if( #n == 0 ) {
        message "$$$testフォルダの作成に失敗しました。";
        endmacro;
    }
    #n = dllfunc("SelectFolder", "", "受信\\$$$test");
    #n = dllfunc("SetGrepFolderAutoInvalidate", 0);
    #n = dllfunc("RefreshMailList");
    if( dllfunc("MailCount") != 0 ) {
        #n = dllfunc("SelectAllMail");
        #n = dllfunc("SetHeaderForMultiSelect", "X-Memo:", "メモメモ");
    }
    #n = dllfunc("DeleteFolder", 1);


 一番最後のDeleteFolder関数呼び出しは、マクロを十分テストするまではコメ
ントアウトしておいた方が無難かもしれません。

[ ]
RE:42360 マクロでメール検索してメモをつNo.42368
Kamataro さん 12/03/04 15:37
 
Iranoan さん

Kametaroです。アドバイスいただきありがとうございます。
教えていただいた条件設定と秀まるお2さんに教えていただいた検索フォルダを使う
方法で所望の目的を達成できそうです。
諦めかけていたことが実現できてとてもうれしいです。

#n = dllfunc("MakeGrepFolder", "$$$test"
      , "(\"test\", target=subject) and (\"メモメモ\", target=memo)
      , subfolder=1
      ,flag=unread&!send&transmit=メーラー起動時-指定なし
      ,inmail=2"
      , "\\CurrentAccount," );

[ ]
RE:42365 マクロでメール検索してメモをつNo.42369
Kamataro さん 12/03/04 16:00
 
アドバイスありがとうございます。
教えていただいた2つの方法で所期の目的が達成できそうです。
検索フォルダを使った方法で進みたいと思います。
ありがとうございます。

ここから進んでさらに質問させてください。

指定フォルダ、たとえば"受信"フォルダに限定して検索することは可能でしょうか?

現状、私の場合アカウント内に2000件ほどのメールがあるので、これを毎回すべてを
検索するのではなく、特定フォルダに限定して効率的に検索をできればと思います。

MakeGrepFolder関数で inmail= 0 などにしてみましたが、うまくいきませんでした。

よろしくお願いします。

[ ]
RE:42369 マクロでメール検索してメモをつNo.42371
秀まるお2 さん 12/03/04 18:46
 
 受信フォルダに限定するには、例えば

    #n = dllfunc("MakeGrepFolder", "$$$test"
                , "(\"test\", target=subject), subfolder=0, inmail=2"
                , "\\CurrentAccount,受信" );

 みたいになります。

 検索フォルダを実際に作ってみて、それのプロパティの「検索対象フォルダ」
の所に出てくる文字列を見るのが手っ取り早いです。

[ ]
RE:42371 マクロでメール検索してメモをつNo.42376
Kamataro さん 12/03/07 01:03
 
教えていただいた方法で、うまくいきました。
諦めかけていたことが実現できてとても嬉しいです。
ありがとうございました。

> 検索フォルダを実際に作ってみて、それのプロパティの「検索対象フォルダ」
>の所に出てくる文字列を見るのが手っ取り早いです。

ありがとうございます。
難しい条件設定が楽に組めてとても助かります。
また勉強するにもいいですね。

[ ]