4

POP3 プロトコルを使用して新しいメッセージをリッスンしようとしています。フォルダーが開いている間、Pop3 では新しいメッセージが受信トレイに表示されないことを認識しています。以下は私が実装したコードです:

import javax.mail.event.MessageCountAdapter;
import javax.mail.event.MessageCountEvent;

public class EmailListener extends MessageCountAdapter {

public EmailListener() {

}

public void messagesAdded(MessageCountEvent e) {
    System.out.println("I");
}

public void messagesRemoved(MessageCountEvent e) {
    System.out.println("J");
}
}

public class POPReceiver {

 public POPReceiver() {

 }

public void listen() throws Exception {
    Properties properties = new Properties();
    Session session = null;
    POP3Store pop3Store = null;
    String host = "NB-EX101.example.com";
    String user = "user2";
    properties.put(mail.pop3.host, host);
    session = Session.getDefaultInstance(properties);
    pop3Store = (POP3Store) session.getStore("pop3");
    pop3Store.connect(user, "password");
    Folder folder = pop3Store.getFolder("INBOX");
    folder.addMessageCountListener(new EmailListener());
    sendEmail();
}

public void sendEmail() {
    // not added code, but the email sends
}
}

public static void main(String[] args) throws Exception {
      POPReceiver i = new POPReceiver();
      i.listen();
 }

Microsoft Exchange Server を使用しています。聞いていない理由はありますか?

http://www.coderanch.com/t/597347/java/java/Email-Listenerを見ましたが、まだリッスンしません。

4

1 に答える 1

9

Javamail FAQ から ( http://www.oracle.com/technetwork/java/javamail/faq/index.html ):


QMessageCountListener : (監視プログラムで示されているように)を設定しましたが、POP3 INBOX に新着メールが通知されません。

A : POP3 プロトコルでは、INBOX が開いている間、INBOX に配信された新しいメッセージをクライアントが見ることはできません。新しいメッセージを表示するには、アプリケーションで INBOX を閉じてから再度開く必要があります。MessageCountListenerPOP3 とのインターフェイスを使用して新着メールが通知されることはありません。詳細については、com.sun.mail.pop3パッケージのドキュメントを参照してください。


そのMessageCountListenerため、POP3 では機能しません。POP3 の新しいメッセージに関する情報を取得するには、ポーリングを実装する必要があります。

ただし、代わりに IMAP を使用してみることができます。

しかし、IMAP の場合でも、これを別の方法で使用する必要があります。idle()クラスのメソッドを参照してくださいIMAPStore(たとえば、別のスレッドのループで呼び出されているなど - https://javamail.java.net/nonav/docs/api/com/sun/mail/imap/IMAPStore.html#idle()を参照) .

于 2013-05-02T10:36:15.520 に答える