Виявлення нових електронних листів на 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;
}