Erkennen neuer E‑Mail‑Nachrichten auf POP3‑Server
Bei POP3‑Konten können Sie Nachrichten beim Herunterladen und Lesen auf dem Server belassen. Das Belassen von E‑Mails auf dem Server bedeutet, dass sie für andere Anwendungen und Personen verfügbar sind, z. B. für Benutzer, die von mehreren Geräten auf ihre E‑Mails zugreifen. Oder Sie möchten nur Nachrichten herunterladen, die bestimmte Kriterien erfüllen, z. B. Nachrichten mit einem bestimmten Betreff. Um E‑Mails zu verwalten, können Sie;
- Lesen Sie alle Nachrichten vom POP3‑Mail‑Server mit Aspose.Email.
- Laden Sie die Nachrichten in Ihre lokale Datenbank herunter.
Die Nachrichten werden nicht gelöscht, sondern verbleiben auf dem Server. Beim ersten Durchlauf funktioniert dieser Prozess einwandfrei. Alle erforderlichen Nachrichten werden in die Datenbank heruntergeladen. Beim zweiten Durchlauf werden jedoch dieselben Nachrichten erneut heruntergeladen, da sie noch auf dem E‑Mail‑Server sind. Das führt zu doppelten Datensätzen. Um dieses Problem zu lösen, verwenden Sie die Pop3MessageInfo.UniqueID Eigenschaft, um zu prüfen, ob eine Nachricht bereits heruntergeladen wurde. Die eindeutige ID der Nachricht muss in der Datenbank gespeichert werden: Sie dient als Suchschlüssel zum Erkennen neuer Nachrichten.
Erkennen neuer Nachrichten
Um neue E‑Mails aus einer E‑Mail‑Liste auf einem POP3‑Server zu identifizieren:
- Mit dem Server verbinden.
- Eine Liste von E‑Mails abrufen.
- Mit der Datenbank verbinden.
- Eine Liste von E‑Mails abrufen.
- Die Listen vergleichen.
- Neue E‑Mails in der Datenbank speichern.
Der Vorgang ist schneller, wenn Sie:
- Alle eindeutigen IDs der Nachrichten in einer Hashtabelle abrufen.
- Durchsuchen Sie die Hashtabelle anstatt der Datenbank für jede E‑Mail‑Nachricht in einer for(…)‑Schleife.
Anstatt die Datenbank für jede Nachricht abzufragen, was viele Datenbankaufrufe erfordert, benötigt diese Methode nur einen Aufruf. Das folgende Code‑Snippet zeigt, wie man neue E‑Mail‑Nachrichten auf dem POP3‑Server erkennt.
public static void run() {
try {
// Connect to the POP3 mail server and check messages.
Pop3Client pop3Client = new Pop3Client("pop.domain.com", 993, "username", "password");
// List all the messages
Pop3MessageInfoCollection msgList = pop3Client.listMessages();
for (Pop3MessageInfo msgInfo : msgList) {
// Get the POP3 message's unique ID
String strUniqueID = msgInfo.getUniqueId();
// Search your local database or data store on the unique ID. If a match is found, that means it's already downloaded. Otherwise download and save it.
if (searchPop3MsgInLocalDB(strUniqueID) == true) {
// The message is already in the database. Nothing to do with this message. Go to next message.
} else {
// Save the message
savePop3MsgInLocalDB(msgInfo);
}
}
} catch (Exception ex) {
System.err.println(ex);
}
}
private static void savePop3MsgInLocalDB(Pop3MessageInfo msgInfo) {
// Open the database connection according to your database. Use public properties (for example msgInfo.Subject) and store in database,
// for example, " INSERT INTO POP3Mails (UniqueID, Subject) VALUES ('" + msgInfo.UniqueID + "' , '" + msgInfo.Subject + "') and Run the query to store in database.
}
private static boolean searchPop3MsgInLocalDB(String strUniqueID) {
// Open the database connection according to your database. Use strUniqueID in the search query to find existing records,
// for example, " SELECT COUNT(*) FROM POP3Mails WHERE UniqueID = '" + strUniqueID + "' Run the query, return true if count == 1. Return false if count == 0.
return false;
}