Откриване на нови имейл съобщения на POP3 сървър
С POP3 акаунти можете да оставяте съобщенията на сървъра при изтегляне и четене. Оставянето на имейли на сървъра означава, че те са достъпни за други приложения и лица, например потребители, които достъпват имейла си от няколко устройства. Или може да желаете да изтегляте само съобщения, отговарящи на определени критерии, например съобщения с конкретна тема. За управление на имейлите можете да:
- Прочетете всички съобщения от POP3 пощенски сървър с помощта на Aspose.Email.
- Изтеглете съобщенията в локалната си база данни.
Съобщенията не се изтриват, а остават на сървъра. Първият път, когато се изпълни, процесът работи добре. Всички необходими съобщения се изтеглят в базата данни. Но вторият път, когато се изпълни, същите съобщения се изтеглят отново, тъй като все още са на имейл сървъра. Това води до дублирани записи. За да решите този проблем, използвайте Pop3MessageInfo.UniqueID свойство за проверка дали съобщението вече е изтеглено. Уникалният идентификатор на съобщението трябва да бъде съхранен в базата данни: той е ключът за търсене при откриване на нови съобщения.
Откриване на нови съобщения
За идентифициране на нови имейли от списък с имейли на POP3 сървър:
- Свързвате се със сървъра.
- Получавате списък с имейли.
- Свързвате се с базата данни.
- Получавате списък с имейли.
- Сравнявате списъците.
- Запазвате нови имейли в базата данни.
Процесът е по-бърз, когато:
- Извлечете всички уникални идентификатори на съобщенията в хеш таблица.
- Търсете в хеш таблицата вместо в базата данни за всяко имейл съобщение в цикъл for(…).
Вместо да се правят заявки към базата данни за всяко съобщение, изискващи множество повиквания, този метод изисква само едно повикване. Следният кодов фрагмент показва как да откриете нови имейл съобщения на POP3 сървъра.
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;
}