Обнаружение новых писем на сервере POP3
С помощью учетных записей POP3 вы можете оставлять сообщения на сервере при их загрузке и чтении. Оставление писем на сервере означает, что они доступны другим приложениям и пользователям, например, пользователям, которые получают доступ к своей электронной почте с нескольких устройств. Или вы можете захотеть загружать только те сообщения, которые соответствуют особым критериям, например, сообщения с определенной темой. Для управления электронной почтой вы можете:
- Читать все сообщения с почтового сервера POP3 с помощью Aspose.Email.
- Загружать сообщения в вашу локальную базу данных.
Сообщения не удаляются, а остаются на сервере. При первом запуске этот процесс работает нормально. Все необходимые сообщения загружаются в базу данных. Но при втором запуске загружаются те же сообщения, потому что они все еще находятся на почтовом сервере. Это приводит к дублированию записей. Чтобы решить эту проблему, используйте свойство Pop3MessageInfo.UniqueID для проверки, было ли сообщение уже загружено. Уникальный идентификатор сообщения должен храниться в базе данных: это ключ для поиска новых сообщений.
Обнаружение новых сообщений
Чтобы идентифицировать новые электронные письма из списка писем на сервере POP3:
- Подключитесь к серверу.
- Получите список писем.
- Подключитесь к базе данных.
- Получите список писем.
- Сравните списки.
- Сохраните новые письма в базе данных.
Процесс проходит быстрее, когда вы:
- Извлекаете все уникальные идентификаторы сообщений в хэш-таблицу.
- Ищете в хэш-таблице вместо базы данных для каждого электронного письма в цикле foreach(…).
Вместо запроса к базе данных для каждого сообщения, что требует множества вызовов к базе данных, этот метод требует только одного вызова. Следующий код показывает, как обнаружить новые письма на сервере POP3.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
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(); | |
foreach (Pop3MessageInfo msgInfo in msgList) | |
{ | |
// Get the POP3 message's unique ID | |
string strUniqueID = msgInfo.UniqueId; | |
// 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) | |
{ | |
Console.WriteLine(ex.Message); | |
} | |
} | |
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 bool 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; | |
} |