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
注释,现在一切都很好。
我实现了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
注释,现在一切都很好。