Abrufen aller ungelesenen E-Mails mit Javamail mit POP3-Protokoll
Ich versuche, Zugriff auf mein gmail-Konto und rufen Sie die Informationen aller ungelesenen E-Mails aus.
Habe ich geschrieben das mein code nach verweisen viele links. Ich gebe ein paar links für Referenz.
Senden & Empfangen Sie E-Mails über ein Google Mail-Konto mit Hilfe von Java
Java-Code Empfangen von E-Mails mit JavaMailAPI
Testen mein code, ich habe ein Gmail-Konto. So erhielt ich 4 Nachrichten von Gmail.
Ich starte meine Anwendung nach der überprüfung der Anzahl der mails. Zeigte das richtige Ergebnis. 4 ungelesene mails.
Alle Informationen wurde, angezeigt wird (z.B. Datum, Absender, Inhalt, Thema, etc.)
Ich dann eingeloggt in meinen account, lese die E-Mails und erneut meine Anwendung.
Nun die Anzahl der ungelesenen Nachricht sollte 3 sein, aber es zeigt "Keine. Ungelesene Nachrichten : 0"
Kopiere ich den code hier.
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, "[email protected]",
"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();
}
}
Habe ich gesucht auf google, aber ich fand, Sie sollten die use-Flags.Flag.GESEHEN, gelesen, ungelesene E-Mails.
Aber das zeigt nicht die richtigen Ergebnisse in meinem Fall.
Kann mir jemand zeigen wo ich vielleicht dabei einige Fehler???
Wenn Euch müssen ganze code, ich kann meinen Beitrag Bearbeiten.
Hinweis: bearbeitete ich meine Frage, auch ganze code anstelle von snippet-ich hatte weiter oben geschrieben.
InformationsquelleAutor der Frage MysticMagicϡ | 2012-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein code sollte funktionieren. Sie können auch die Ordner.getUnreadMessageCount () - Methode, wenn alle Sie wollen, ist die Zählung.
JavaMail kann Ihnen nur sagen, was Gmail erzählt. Vielleicht Gmail denkt, dass alle diese Nachrichten gelesen wurden? Vielleicht ist die Gmail-web-interface-Kennzeichnung diese Meldungen Lesen? Vielleicht haben Sie eine andere Anwendung die überwachung der Ordner für neue Nachrichten?
Lesen Sie eine ungelesene Nachricht mit JavaMail und sehen, wenn sich die Anzahl ändert.
Könnten Sie es nützlich finden, schalten Sie debugging-Sitzung, so dass Sie, die tatsächliche sehen können IMAP Antworten, Gmail zurückgeben; siehe die JavaMail-FAQ.
InformationsquelleAutor der Antwort Bill Shannon
Ändern
inbox.open(Folder.READ_ONLY);
zuinbox.open(Folder.READ_WRITE);
Es wird sich ändern Sie Ihre E-mail als gelesen im Posteingang.
InformationsquelleAutor der Antwort user1791574
Können Sie nicht abrufen von ungelesener Nachrichten mit POP3. Von JavaMail API:
Können Sie die Verwendung von IMAP-Protokoll und die Flagge GESEHEN wie dieses:
Andere Sache zu beachten ist, dass POP3 nicht handhaben Ordnern. IMAP-Ordner bekommt, POP3 wird nur der Posteingang. Mehr info unter: Gewusst wie: abrufen von gmail-sub-Ordner/labels mit POP3?
InformationsquelleAutor der Antwort Technotronic
InformationsquelleAutor der Antwort ibrahimKiraz
Die richtige Flagge zu benutzen ist
InformationsquelleAutor der Antwort user1397305
bitte verwenden Sie diese Methode zum abrufen der E-mails ungelesen
getNewMessageCount()
siehe unten link:
https://javamail.java.net/nonav/docs/api/com/sun/mail/imap/IMAPFolder.html
InformationsquelleAutor der Antwort vidhyadhar