目的のメールをすばやく表示したいNo.32163
緒方聡 さん 07/09/03 23:30
 
お世話になってます。

秀丸メール用のbiffソフトを作っています。
以下の流れで動作します。

1. 秀丸メール起動時に各アカウントの受信ログを調査
2. 受信がひと段落したタイミングで受信したメールの詳細を取得
3. 受信したメールのサマリーを画面隅にバルーン表示
4. バルーンをクリックすると秀丸メール本体でメール検索

最後の 4 のステップで質問があります。

今現在の実装は、バルーンから秀丸メールへの連携で Message-ID などのユニークな
内容でアカウント検索するマクロを 2〜3 のステップで自動生成して、そのマクロで
目的のメールを秀丸メール本体で選択させようとしています。

この方法でできてはいるのですが、選択されるまでが遅くて、うーん、使い物になり
ません。

検索して一覧を作成したその一覧をダブルクリックして秀丸メール本体で表示させる
ときぐらいの速度でバルーンからそのメールを表示させたいのですが、よい方法はあ
りますか?

[ ]
RE:32163 目的のメールをすばやく表示したNo.32164
Iranoan さん 07/09/04 02:24
 
 緒方聡さん今日は、Iranoan です。
 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです。
> 検索して一覧を作成したその一覧をダブルクリックして秀丸メール本体で表示させる
> ときぐらいの速度でバルーンからそのメールを表示させたいのですが、よい方法はあ
> りますか?
 これと同じ速度にするのは難しいと思います。
 ただ
> Message-ID などのユニークな
> 内容でアカウント検索するマクロを 2〜3 のステップで自動生成して、そのマクロで
> 目的のメールを秀丸メール本体で選択させようとしています。
に付いてですが、Message-ID を使っているなら、「Message-ID 検索」相当の
処理はしているのでしょうか?「Message-ID 検索」で対象を Message-ID に限
定していれば、検索にはそれ程時間がかからないと思うのですが。

 また試していませんが、「flag=hot&!send」(新着の受信メール) のフラグ
を追加すると速くなるかも知れません。

[ ]
RE:32163 目的のメールをすばやく表示したNo.32168
秀まるお2 さん 07/09/04 11:20
 
 Message-Idで検索して表示してるのですかね。

 検索結果からダブルクリックした場合というのは、Message-Idでメールを探し
てるんじゃなくて、「メールの置いてあるフォルダ/ファイル名/ファイル中で
のメールの位置(オフセット)」という情報でメールを特定しています。

 メールが特定できた時に、そのメールのMessage-Idといっしょにtkinfo.dllの

 MailFilePath
 MailFileOffset

 を呼び出して、その情報を記録しておくといいんじゃないかと思います。それ
を使ってメールを選択表示させるには、秀丸メール起動時の/vfオプションを使
えばいいかと思います。

 /vfオプションについては、ヘルプの「秀丸メール起動時のコマンドライン」
を参照して欲しいです。

[ ]
RE:32164 目的のメールをすばやく表示したNo.32169
緒方聡 さん 07/09/04 14:57
 
Iranoan さん、こんにちは。

>「Message-ID 検索」で対象を Message-ID に限
>定していれば、検索にはそれ程時間がかからないと思うのですが。

自動生成しているマクロは以下のような感じです。

#n=dllfunc("SelectFolder","<ACCOUNT_NAME>","受信");
#n=dllfunc("SetFindPack","(\"<MESSAGE_ID>\",casesense,word,target=person),me
ssageidtarget=messageid");
#n=dllfunc("FindDown");
if(#n==0){
  #n=dllfunc("FindUp");
}

下に向かって探して、なければ上に向かって再度探す、という処理なので、最悪ケー
スでアカウントの全フォルダをなめます。Message-ID 検索でも結構時間がかかります。

私の環境だと最長で 6〜8 秒ぐらいです。

# 今気がついたんですが、受信箱の下にフォルダを生成する
# 私の習慣が前提になってました

[ ]
RE:32168 目的のメールをすばやく表示したNo.32170
緒方聡 さん 07/09/04 15:05
 
秀まるお2さん、こんにちは。

> /vfオプションについては、ヘルプの「秀丸メール起動時のコマンドライン」
>を参照して欲しいです。

メールの受信がひと段落した時に、受信ログ\受信ログYYYYMMDD.txt を読み込んで、
増えた分が受信したメールだという識別方法をとっています。

今は Message-ID と Date と、バルーンに表示させる Subject と From と本文 6 行
分ぐらいを保持しているのですが、ファイル名とオフセットは現在の処理にちょっと
手を加えれば記憶しておけるので、試してみたいと思います。

[ ]
RE:32170 目的のメールをすばやく表示したNo.32171
アルビレオ さん 07/09/04 15:42
 
ユーザーのアルビレオです。

>> /vfオプションについては、ヘルプの「秀丸メール起動時のコマンドライン」
>>を参照して欲しいです。
>
>メールの受信がひと段落した時に、受信ログ\受信ログYYYYMMDD.txt を読み込んで、
>増えた分が受信したメールだという識別方法をとっています。
>
>今は Message-ID と Date と、バルーンに表示させる Subject と From と本文 6 行
>分ぐらいを保持しているのですが、ファイル名とオフセットは現在の処理にちょっと
>手を加えれば記憶しておけるので、試してみたいと思います。

/vfオプションで指定したファイルが受信ログファイルだと、表示されるのは受
信ログフォルダ内のデコードされてないものになりそうな気がするんですが。


ところで秀まるおさんに質問です。新着リストの一覧表示はMessage-ID検索より
もかなり高速ですが、これは flag=hot&!send 相当の検索をしているだけと考え
ていいのでしょうか?
もしそうなら、Iranoanさんの案は十分に期待できると思うのですが。

[ ]
RE:32171 目的のメールをすばやく表示したNo.32172
秀まるお2 さん 07/09/04 16:20
 
> ところで秀まるおさんに質問です。新着リストの一覧表示はMessage-ID検索より
> もかなり高速ですが、これは flag=hot&!send 相当の検索をしているだけと考え
> ていいのでしょうか?

 たしかにフラグによる絞り込み(hot&!send)をしてると思います。

 ただし、message-idによる検索(target=person, messageidtarget=allの検
索)でも速度的にはほとんど変わらないと思います。

[ ]
RE:32169 目的のメールをすばやく表示したNo.32173
Iranoan さん 07/09/04 16:32
 
 緒方聡さん今日は、Iranoan です。
> 下に向かって探して、なければ上に向かって再度探す、という処理なので、最悪ケー
> スでアカウントの全フォルダをなめます。Message-ID 検索でも結構時間がかかり
>ます。
 いつもトップアカウントを選択するようにしてはどうでしょう。

> 私の環境だと最長で 6〜8 秒ぐらいです。
 どちらにしても時間がかかりそうですね(^^;。
 ##メールの数がすごいんですね。

 あと、内部的な動作がわからないので、外しているかも知れませんが、
> #n=dllfunc("SetFindPack","(\"<MESSAGE_ID>\",casesense,word,target=person),me
> ssageidtarget=messageid");
#n=dllfunc("SetFindPack","(\"<MESSAGE_ID>\",target=person),
messageidtarget=messageid");
としたほうがひょっとして早くなったりするのでしょうか?→ALL

[ ]
RE:32171 目的のメールをすばやく表示したNo.32174
緒方聡 さん 07/09/04 17:42
 
アルビレオさん、こんにちは。

>/vfオプションで指定したファイルが受信ログファイルだと、表示されるのは受
>信ログフォルダ内のデコードされてないものになりそうな気がするんですが。

おっしゃるとおりでした。

やりたいことを行うには、受信ログだけを監視するのではだめで、GetFolderHotStat
e などと組み合わせて各フォルダのテキストファイルを全て監視するか、filter.txt
 の振り分けにしたがってどのフォルダに振り分けられたかを計算しなければならな
いようです。

[ ]
RE:32174 マクロがサポートしていない設定No.32244
緒方聡 さん 07/09/12 19:59
 
緒方です。

filter.txtの内容を調査して、どのメールがどのフォルダに
振り分けられたかを判定する処理を作成したのですが、
結構大き目のログファイルをわりとたくさん検索しなければ
ならないので時間がかかってしまうこともあり
(処理が煩雑でバグがまぎれそうなのが最大の理由ですが)
filterlog.txtの内容を読み込んで振り分け先を判定するようにしました。

マクロの手順としては、

1. 受信直前にマクロからfilterlog.txtを詳細で作成する設定にする
2. 秀丸メールが受信する
3. 受信完了のタイミングでfilterlog.txtの内容を読み取る

ということを行いたいのですが、filterlog.txtの作成を行うように
マクロから秀丸メールに通知させる方法がわかりません。

Win32APIでレジストリ
"HKEY_CURRENT_USER\\Software\\Hidemaruo\\TuruKame\\Config\\FilterLog"
を書き換えても、それだけでは秀丸メールに反映されませんでした。


あらかじめそのように設定しておく、というのが最後の手段なのですが
できれば自動的に設定したいと考えています。

なにかよいアイデアはないでしょうか。

[ ]
RE:32244 マクロがサポートしていない設定No.32245
Iranoan さん 07/09/12 20:11
 
 緒方聡さん今日は、Iranoan です。
 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです。
> Win32APIでレジストリ
> "HKEY_CURRENT_USER\\Software\\Hidemaruo\\TuruKame\\Config\\FilterLog"
> を書き換えても、それだけでは秀丸メールに反映されませんでした。
 マクロでレジストリの秀丸メールの設定箇所を書き換えたのなら、
EnvChanged() 関数を使って、書き換えたレジストリの内容を秀丸メールで読
み込んでやらないと駄目です。

[ ]
RE:32245 マクロがサポートしていない設定No.32246
Iranoan さん 07/09/12 20:22
 
 緒方聡さん今日は、Iranoan です。
> > Win32APIでレジストリ
 補足です。
 ご存知とは思いますが、秀丸メールでは、レジストリの値の取得や設定は、
writeregnum, writeregstr 文、getregnum(), getregstr() 関数でできます。

[ ]
RE:32246 マクロがサポートしていない設定No.32248
緒方聡 さん 07/09/13 08:56
 
Iranoan-san、こんにちは

>EnvChanged() 関数を使って、書き換えたレジストリの内容を秀丸メールで読
>み込んでやらないと駄目です。

アドバイスありがとうございます。


> ご存知とは思いますが、秀丸メールでは、レジストリの値の取得や設定は、
>writeregnum, writeregstr 文、getregnum(), getregstr() 関数でできます。

こちらもアドバイス恐縮です。

今のつくりはマクロから実行形式の外部プログラムを読み込んで
大半の処理はそちらで行っているため Win32API という書き方を
しました。

# それにしてもお詳しいですね。

[ ]
RE:32163 目的のメールをすばやく表示したNo.32369
緒方聡 さん 07/10/03 07:09
 
おかげさまで、それなりのものが完成しました。

動作イメージを YouTube にアップしたので、
感想などいただければと思います。

http://jp.youtube.com/watch?v=NXUVWcaQLnU

2週間ぐらいテストしているんですが、問題なさそうなので
そろそろ公開しようと思います。

本当は秀丸メール起動時に常駐、終了時に常駐解除という形で
常駐させたかったんですが、常駐アプリを嫌う人は結構多いのかな
と思い、受信ごとにメールをまさぐってます。

[ ]
RE:32369 目的のメールをすばやく表示したNo.32370
Panda さん 07/10/03 10:17
 
 Pandaです。

ToastNotifyと連携させる? マクロを使っていますが、
それの高機能版みたいでいいですね。

私は個人的には常駐するほうのものがむしろいいです。
あれもこれも個別にやると面倒ですし。

[ ]
RE:32370 目的のメールをすばやく表示したNo.32405
緒方聡 さん 07/10/05 17:57
 
Pandaさん、緒方です。

>私は個人的には常駐するほうのものがむしろいいです。

そうでしたか、貴重なご意見ありがとうございます。

一番最初の設計(というかいろいろ考えてやってみる)時期に
秀丸メールを常駐させないで使っている人がいったい
どれぐらいいるのかわかりませんが、そういうケースにも
対応できるなぁ、と思いまして。

常駐しないでどれだけ速く処理できるか、というテーマを
追求できたので、作ってて面白かったは面白かったです。

[ ]