javamail 中的 messageAdded() 方法不起作用

messageAdded() method in javamail is not working

我实现了Javamail API提供的messageAdded方法,我的程序没有进入那个方法。这是我的代码

public void addMessageListenerToFolder(Folder folder, EmailFolderBean<String> item) {
    System.out.println("Add message listener point 1");
    folder.addMessageCountListener(new MessageCountAdapter() {

        public void messageAdded(MessageCountEvent e) {
            for (int i = 0; i < e.getMessages().length; i++) {
                try {
                    System.out.println("Add message listener point 2");
                    Message currentMsg = folder.getMessage(folder.getMessageCount() - i);
                    item.addEmail(0, currentMsg);
                } catch (MessagingException ex) {
                    Logger.getLogger(FetchFolderService.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    });
}

我添加了两个 System.out 语句,一个在上面代码的第二行,另一个在 messageAdded() 方法中,每次调用此方法时都会打印出第一条语句,但我的程序执行不进入 messageAdded() 并且从不打印第二个 System.out 语句。可能是什么原因。帮我解决这个问题。

Edit1: 我总是有一项服务 运行 每 10 秒发送一次 folder.getMessageCount();Edit2:我正在测试,这不是最终版本我可以稍后增加时间这是我的服务。

@Override
    protected Task<Void> createTask() {
        return new Task<Void>() {
@Override
protected Task<Void> createTask() {
    return new Task<Void>() {

        @Override
        protected Void call() throws Exception {
            for (;;) {
                try {
                    Thread.sleep(10000);
                    if (FetchFolderService.noServiceActive()) {
                        System.out.println("Checking for Emails!!!!");
                        for (Folder folder : folderList) {
                            if (folder.getType() != Folder.HOLDS_FOLDERS && folder.isOpen()) {
                                folder.getMessageCount();

                            }
                        }
                    }
                } catch (InterruptedException | MessagingException e) {
                    e.printStackTrace();
                }
            }
        }
    };
}

这是调试信息。

Deleting: C:\Users\Inzimam\Documents\NetBeansProjects\Mail Client\build\built-jar.properties
deps-jar:
Updating property file: C:\Users\Inzimam\Documents\NetBeansProjects\Mail Client\build\built-jar.properties
Compiling 1 source file to C:\Users\Inzimam\Documents\NetBeansProjects\Mail Client\build\classes
compile-single:
Successful Authentication!
Folder: INBOX
Folder: [Gmail]
subFolder: All Mail
subFolder: Drafts
subFolder: Important
subFolder: Sent Mail
subFolder: Spam
subFolder: Starred
subFolder: Trash
Checking for Emails!!!!
Checking for Emails!!!!
Checking for Emails!!!!
Checking for Emails!!!!
Checking for Emails!!!!
Checking for Emails!!!!
Checking for Emails!!!!
debug-single:
BUILD SUCCESSFUL (total time: 1 minute 54 seconds)

仅当服务器通知客户端(JavaMail)已添加消息时才会调用侦听器,并且此类通知仅在您向服务器发出命令时才会发生,例如folder.getMessageCount( ).或者,如果您只想等待通知,则可以使用 IMAPFolder.idle() method. See also the IdleManager class.

上面的代码中有错字(错误)。我用了messageAdded() 但是javamail提供了messagesAdded()方法。所以有了正确的拼写和 Override 注释,现在一切都很好。