javamail中的messageAdded()方法无法正常工作

时间:2017-01-16 21:12:36

标签: java service javamail imap

我已实施messageAdded提供的Javamail API方法,我的程序不会进入该方法。这是我的代码

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语句。可能是什么原因。帮我解决这个问题。

编辑1:我的服务始终在运行,每10秒发送一次folder.getMessageCount();编辑2:我正在测试,而不是最终我可以增加时间以下这是我的服务。

@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)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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