7

JavaMail で検索する方法について何かが欠けていると思います。

  1. フォルダーから空のメッセージをダウンロードする
  2. 結果に一致する新しい SearchTerm を作成します
  3. 検索語を使用して結果をフィルタリング (yourFolder.search) します。

これは機能します。しかし、なぜこのようにするのですか?gmail などに接続するために javamail を使用している場合、検索はサーバー側で実行されていません。効率化またはネットワーク経由で送信する必要があるデータ量の削減...

サーバー側で検索を実行し、一致のリストを返す方法がわかりません。何か案は?

編集: サーバー側で検索を実行しない、現在行っていることの疑似コードを含めます。これをSearchTermを使用するように変換したとしても、サーバー側では何も実行されませんよね?

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "gimaps");
final Session session = Session.getDefaultInstance(props, null);
final GmailSSLStore store = (GmailSSLStore) session.getStore("gimaps");
store.connect(ADDRESS, PASSWORD);
final GmailFolder allMailFolder = (GmailFolder) store.getFolder("[Gmail]/All Mail");
allMailFolder.open(Folder.READ_ONLY);
final Message[] allMessages = allMailFolder.getMessages();
System.out.println("Messages:" + allMessages.length);

FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
allMailFolder.fetch(allMessages, fp);

for (final Message message : allMessages) {
  final Address[] addrs = message.getFrom();
  if (addrs != null) {
    for (final Address addr : addrs) {
      if (addr.toString().toLowerCase().contains("george")) {
        System.out.println(addr.toString());
      }
    }
  }
}
4

2 に答える 2

0

定義済みの実装を使用して IMAP フォルダーを検索している場合SearchTerm、サーバー上で検索を実行しようとします。の実装を見てくださいSearchSequence.generateSequence。あなたの例では、おそらくFromStringTerm.

gimap プロバイダーを使用している場合は、X-GM-RAW検索属性を含む Google の IMAP 拡張も使用でき、Gmail の Web インターフェイスとまったく同じように検索できます。Java 実装があり、GmailRawSearchTermサーバー側でのみ機能します。

于 2014-12-13T16:04:59.653 に答える
0

あなたは何か間違ったことをしていますが、あなたが何をしているのかを知るのに十分な詳細を提供していません.

IMAP を使用していますか?

いくつかのコードとデバッグ出力を示してください。

于 2013-10-09T07:10:51.293 に答える