java 未读邮件_使用带有POP3协议的javamail检索所有未读电子邮件

该博客介绍了如何使用JavaMail API和POP3协议连接到Gmail帐户,检索并显示未读邮件的数量、发件人、收件人、主题、发送日期和内容。作者在代码实现后遇到一个问题,即已读邮件仍然被计为未读邮件。他们寻求帮助以解决这个问题。
摘要由CSDN通过智能技术生成

我试图访问我的Gmail帐户,并从中检索所有未读电子邮件的信息。

我已经写了我的代码之后引用了很多链接。我给了几个链接供参考。

要测试我的代码,我创建了一个Gmail帐户。因此,我从Gmail收到了4封邮件。

我在检查邮件数后运行我的应用程序。这显示正确的结果。 4封未读邮件。

正在显示所有信息(例如日期,发件人,内容,主题等)

然后我登录到我的新帐户,阅读其中一封电子邮件并重新运行我的申请。

现在未读消息的计数应该是3,但它显示“未读消息数:0”

我在这里复制代码。

public class MailReader

{

Folder inbox;

// Constructor of the calss.

public MailReader() {

System.out.println("Inside MailReader()...");

final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

/* Set the mail properties */

Properties props = System.getProperties();

// Set manual Properties

props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);

props.setProperty("mail.pop3.socketFactory.fallback", "false");

props.setProperty("mail.pop3.port", "995");

props.setProperty("mail.pop3.socketFactory.port", "995");

props.put("mail.pop3.host", "pop.gmail.com");

try

{

/* Create the session and get the store for read the mail. */

Session session = Session.getDefaultInstance(

System.getProperties(), null);

Store store = session.getStore("pop3");

store.connect("pop.gmail.com", 995, "abc@gmail.com",

"paasword");

/* Mention the folder name which you want to read. */

// inbox = store.getDefaultFolder();

// inbox = inbox.getFolder("INBOX");

inbox = store.getFolder("INBOX");

/* Open the inbox using store. */

inbox.open(Folder.READ_ONLY);

/* Get the messages which is unread in the Inbox */

Message messages[] = inbox.search(new FlagTerm(new Flags(

Flags.Flag.SEEN), false));

System.out.println("No. of Unread Messages : " + messages.length);

/* Use a suitable FetchProfile */

FetchProfile fp = new FetchProfile();

fp.add(FetchProfile.Item.ENVELOPE);

fp.add(FetchProfile.Item.CONTENT_INFO);

inbox.fetch(messages, fp);

try

{

printAllMessages(messages);

inbox.close(true);

store.close();

}

catch (Exception ex)

{

System.out.println("Exception arise at the time of read mail");

ex.printStackTrace();

}

}

catch (MessagingException e)

{

System.out.println("Exception while connecting to server: "

+ e.getLocalizedMessage());

e.printStackTrace();

System.exit(2);

}

}

public void printAllMessages(Message[] msgs) throws Exception

{

for (int i = 0; i < msgs.length; i++)

{

System.out.println("MESSAGE #" + (i + 1) + ":");

printEnvelope(msgs[i]);

}

}

public void printEnvelope(Message message) throws Exception

{

Address[] a;

// FROM

if ((a = message.getFrom()) != null) {

for (int j = 0; j < a.length; j++) {

System.out.println("FROM: " + a[j].toString());

}

}

// TO

if ((a = message.getRecipients(Message.RecipientType.TO)) != null) {

for (int j = 0; j < a.length; j++) {

System.out.println("TO: " + a[j].toString());

}

}

String subject = message.getSubject();

Date receivedDate = message.getReceivedDate();

Date sentDate = message.getSentDate(); // receivedDate is returning

// null. So used getSentDate()

String content = message.getContent().toString();

System.out.println("Subject : " + subject);

if (receivedDate != null) {

System.out.println("Received Date : " + receivedDate.toString());

}

System.out.println("Sent Date : " + sentDate.toString());

System.out.println("Content : " + content);

getContent(message);

}

public void getContent(Message msg)

{

try {

String contentType = msg.getContentType();

System.out.println("Content Type : " + contentType);

Multipart mp = (Multipart) msg.getContent();

int count = mp.getCount();

for (int i = 0; i < count; i++) {

dumpPart(mp.getBodyPart(i));

}

} catch (Exception ex) {

System.out.println("Exception arise at get Content");

ex.printStackTrace();

}

}

public void dumpPart(Part p) throws Exception {

// Dump input stream ..

InputStream is = p.getInputStream();

// If "is" is not already buffered, wrap a BufferedInputStream

// around it.

if (!(is instanceof BufferedInputStream)) {

is = new BufferedInputStream(is);

}

int c;

System.out.println("Message : ");

while ((c = is.read()) != -1) {

System.out.write(c);

}

}

public static void main(String args[]) {

new MailReader();

}

}

我在google上搜索,但我发现你应该使用Flags.Flag.SEEN读取未读电子邮件。

但是这在我的情况下没有显示正确的结果。

有人可以指出我可能在做一些错误吗?

如果你需要整个代码,我可以编辑我的帖子。

注意:我编辑我的问题,包括整个代码,而不是我之前发布的代码段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值