我正在尝试使用 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);
我不知道我哪里做错了。我的 Activity 没有调用。请帮忙
最佳答案
服务器仅在执行命令时通知客户端新消息。您要么需要定期执行命令,例如通过调用 getMessageCount,要么需要使用 IMAP IDLE support等待通知。另请参阅IdleManager这是 JavaMail 1.5.2 中的新内容.
关于Javamail API - MessageCountListener 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23651221/