【发布时间】:2014-02-06 02:27:09
【问题描述】:
我正在编写一个代码来读取来自 gmail 的电子邮件。因此,当我第一次启动时,它会读取新电子邮件。没关系。但我希望当我第二次启动它时,它不会收到与以前相同的电子邮件。
例如,如果有 3 封未读电子邮件,当我第一次启动时,它会收到 3。但是当我再次启动时,它什么也没有收到(因为它已经收到 3)。如果有一封新电子邮件,我再次启动它,它应该只收到最后一封,而不是前 3 个。
希望我已经足够清楚了。
我使用http://alvinalexander.com/java/javamail-search-unseen-unread-messages-mailbox-pop3的代码
package javamailtests;
import java.io.InputStream;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.search.*;
public class JavaMailSearchInbox {
public static void main(String args[]) throws Exception {
// mail server info
String host = "pop.gmail.com";
String user = "USER";
String password = "PASS";
// connect to my pop3 inbox in read-only mode
Properties properties = System.getProperties();
Session session = Session.getDefaultInstance(properties);
Store store = session.getStore("pop3");
store.connect(host, user, password);
Folder inbox = store.getFolder("inbox");
inbox.open(Folder.READ_ONLY);
// search for all "unseen" messages
Flags seen = new Flags(Flags.Flag.SEEN);
FlagTerm unseenFlagTerm = new FlagTerm(seen, false);
Message messages[] = inbox.search(unseenFlagTerm);
if (messages.length == 0) System.out.println("No messages found.");
for (int i = 0; i < messages.length; i++) {
// stop after listing ten messages
if (i > 10) {
System.exit(0);
inbox.close(true);
store.close();
}
System.out.println("Message " + (i + 1));
System.out.println("From : " + messages[i].getFrom()[0]);
System.out.println("Subject : " + messages[i].getSubject());
System.out.println("Sent Date : " + messages[i].getSentDate());
System.out.println();
}
inbox.close(true);
store.close();
}
}
【问题讨论】:
-
@CarlPalsson 不,这是客户选项。它不是 POP3 的基本功能。您可以选择消息是留在服务器上还是从服务器中删除。真正发生的是,如果您选择该选项,客户端会更加麻烦地删除消息。
-
@EJP Ahhh 感谢您的澄清!
-
从该主机检索 gmail 电子邮件会很棘手