[英]Javamail API - MessageCountListener is not getting Called
我正在嘗試使用Javamail API從我的gmail收件箱中讀取未讀郵件。 這是我的代碼...
final Properties props = new Properties();
props.setProperty("mail.store.protocol", "imaps");
String attachFiles = "";
try
{
final Session session = Session.getInstance(props, null);
final Store store = session.getStore();
store.connect("imap.gmail.com", "*********", "*********");
final Folder inbox = store.getFolder("INBOX");
final MailCountEventListener listener = new MailCountEventListener();
inbox.addMessageCountListener(listener);
inbox.open(Folder.READ_ONLY);
final Message msg = inbox.getMessage(inbox.getMessageCount());
final Address[] in = msg.getFrom();
for (final Address address : in)
{
System.out.println("FROM:" + address.toString());
}
final Multipart mp = (Multipart) msg.getContent();
final BodyPart bp = mp.getBodyPart(0);
if (msg.getContentType().contains("multipart"))
{
final int numberOfParts = mp.getCount();
for (int partCount = 0; partCount < numberOfParts; partCount++)
{
final MimeBodyPart part = (MimeBodyPart) mp.getBodyPart(partCount);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()))
{
// this part is attachment
final String fileName = part.getFileName();
attachFiles += fileName + ", ";
part.saveFile("E:/" + File.separator + fileName);
}
else
{
System.out.println("MultiPart Message Content :" + part.getContent().toString());
}
}
if (attachFiles.length() > 1)
{
attachFiles = attachFiles.substring(0, attachFiles.length() - 2);
}
System.out.println("Attachments: " + attachFiles);
}
System.out.println("SENT DATE:" + msg.getSentDate());
System.out.println("SUBJECT:" + msg.getSubject());
System.out.println("CONTENT:" + bp.getContent());
}
catch (final Exception mex)
{
mex.printStackTrace();
}
我的代碼工作正常。 它正在讀取帶有附加模板的郵件正文。 現在,我想調用MessageCountListener
以便如果有任何新郵件進入我的收件箱,則應自動調用Listener並讀取新郵件正文。
但是這里的問題是我的聽眾沒有打電話。
public class MailCountEventListener implements MessageCountListener
{
/*
* (non-Javadoc)
*
* @see javax.mail.event.MessageCountListener#messagesAdded(javax.mail.event.MessageCountEvent)
*/
@Override
public void messagesAdded(final MessageCountEvent messagecountevent)
{
String attachFiles = "";
System.out.println("message listner invoked.");
final Message[] msgs = messagecountevent.getMessages();
System.out.println("Got " + msgs.length + " new messages");
try
{
final Message msg = msgs[0];
final Address[] in = msg.getFrom();
for (final Address address : in)
{
System.out.println("FROM:" + address.toString());
}
final Multipart mp = (Multipart) msg.getContent();
final BodyPart bp = mp.getBodyPart(0);
if (msg.getContentType().contains("multipart"))
{
final int numberOfParts = mp.getCount();
for (int partCount = 0; partCount < numberOfParts; partCount++)
{
final MimeBodyPart part = (MimeBodyPart) mp.getBodyPart(partCount);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()))
{
// this part is attachment
final String fileName = part.getFileName();
attachFiles += fileName + ", ";
part.saveFile("E:/" + File.separator + fileName);
}
else
{
System.out.println("MultiPart Message Content :" + part.getContent().toString());
}
}
if (attachFiles.length() > 1)
{
attachFiles = attachFiles.substring(0, attachFiles.length() - 2);
}
System.out.println("Attachments: " + attachFiles);
}
System.out.println("SENT DATE:" + msg.getSentDate());
System.out.println("SUBJECT:" + msg.getSubject());
System.out.println("CONTENT:" + bp.getContent());
}
catch (final Exception mex)
{
mex.printStackTrace();
}
}
/*
* (non-Javadoc)
*
* @see javax.mail.event.MessageCountListener#messagesRemoved(javax.mail.event.MessageCountEvent)
*/
@Override
public void messagesRemoved(final MessageCountEvent messagecountevent)
{
// YTODO Auto-generated method stub
}
}
添加監聽器..
final MailCountEventListener listener = new MailCountEventListener();
inbox.addMessageCountListener(listener);
我無法弄清楚我在哪里做錯了。 我的活動沒有打。 請幫忙
服務器僅在執行命令時將新消息通知客戶端。 您要么需要定期執行命令(例如,通過調用getMessageCount),要么需要使用IMAP IDLE支持來等待通知。 另請參閱JavaMail 1.5.2中新增的IdleManager 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.