Как синхронизировать почту на сервере и в моем приложении, использую IMAP(MailKit)
Пишу своего почтового клиента используя библиотеку MailKit. Проблема возникла такая: я кеширую сообщения в локальную бд, для быстродействия работы. Как мне потом при следующем входе синхронизировать кеш в бд и данные на сервере. Может какой то флаг у сообщений есть, что сообщение изменено(ну, например прочитано). Или как понимать, что сообщение удалено было напрямую в почте и мне как то надо это понять и удалить в своем кеше. Подскажите, пожалуйста, в интернете ничего найти подобного не могу.
Ответы (1 шт):
На стороне Imap клиентов нет такой опции как уведомлять о прочтение смс, изменение статуса сообщений. Но есть папки прочитано\не прочитано. Как вариант если только вам проверять папку прочитанные и обрабатывать их
//1. Создать объект ImapClient и подключиться к серверу:
using (var client = new ImapClient())
{
client.Connect("imap.example.com", 993, true);
// Аутентификация на сервере
client.Authenticate("username", "password");
// Код для проверки папки "Прочитанные"
// Отключение от сервера
client.Disconnect(true);
}
//2. Получить объект IMailFolder для папки "Прочитанные":
var folder = client.GetFolder("Прочитанные");
//3. Получить количество сообщений в папке:
var count = folder.Count;
//4. Получить список UID всех сообщений в папке:
var uids = folder.Search(SearchQuery.All).ToList();
//5. Получить список UID всех прочитанных сообщений в папке:
var uids = folder.Search(SearchQuery.Seen).ToList();
//6. Получить список объектов MimeMessage для всех сообщений в папке:
var messages = new List<MimeMessage>();
foreach (var uid in uids)
{
var message = folder.GetMessage(uid);
messages.Add(message);
}
//7. Получить список объектов MimeMessage для всех прочитанных сообщений в папке:
var messages = new List<MimeMessage>();
foreach (var uid in uids)
{
var message = folder.GetMessage(uid);
if (message.Flags.HasFlag(MessageFlags.Seen))
{
messages.Add(message);
}
}