Detektera nya e‑postmeddelanden på POP3‑server
Med POP3‑konton kan du låta meddelanden ligga kvar på servern när du laddar ner och läser dem. Att lämna e‑post på servern betyder att de är tillgängliga för andra program och personer, t.ex. användare som hämtar sin e‑post från flera enheter. Eller du kanske bara vill ladda ner meddelanden som uppfyller vissa kriterier, t.ex. meddelanden med en viss ämnesrad. För att hantera e‑post kan du;
- Läs alla meddelanden från POP3‑mailservern med Aspose.Email.
- Ladda ner meddelandena till din lokala databas.
Meddelandena raderas inte utan stannar kvar på servern. Första gången kör den fungerar processen bra. Alla nödvändiga meddelanden laddas ner till databasen. Men andra gången laddas samma meddelanden ner igen eftersom de fortfarande finns på e‑postservern. Detta orsakar dubbla poster. För att lösa detta, använd Pop3MessageInfo.UniqueID egenskap för att kontrollera om ett meddelande redan har hämtats. Meddelandets unika ID måste lagras i databasen: det är söknyckeln för att detektera nya meddelanden.
Detektera nya meddelanden
För att identifiera nya e‑postmeddelanden från en lista på en POP3‑server:
- Anslut till servern.
- Hämta en lista med e‑postmeddelanden.
- Anslut till databasen.
- Hämta en lista med e‑postmeddelanden.
- Jämför listorna.
- Sparar nya e‑postmeddelanden till databasen.
Processen går snabbare när du:
- Hämta alla unika ID:n för meddelanden till en hash‑tabell.
- Sök i hash‑tabellen istället för i databasen för varje e‑postmeddelande i en for(…)‑loop.
Istället för att fråga databasen för varje meddelande, vilket kräver många databas‑anrop, kräver denna metod bara ett anrop. Följande kodexempel visar hur du detekterar nya e‑postmeddelanden på POP3‑servern.
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;
}