Каталоги IMAP - как парсить список?

zombie

Client
Регистрация
14.08.2012
Сообщения
484
Реакции
122
Баллы
43
Добрый день.
Работаю с мульти-почтами , у интересующих меня сервисов нужные мне письма приходят в разные каталоги, которых я не знаю .
Например, на почте orange.fr нужные мне письма приходят в INBOX/adelyne_craignou@orange_fr (adelyne_craignou@orange_fr - логин аккаунта).

Вопрос:
- можно ли как-то парсить каталоги перед подтверждением как это в самом экшне?
- даже если и спарсить, то как подставить? тамнет места для вставки переменной

да ещё заметил что он не все письма видит вуказанном каталоге
 
Добрый день.
Работаю с мульти-почтами , у интересующих меня сервисов нужные мне письма приходят в разные каталоги, которых я не знаю .
Например, на почте orange.fr нужные мне письма приходят в INBOX/adelyne_craignou@orange_fr (adelyne_craignou@orange_fr - логин аккаунта).

Вопрос:
- можно ли как-то парсить каталоги перед подтверждением как это в самом экшне?
- даже если и спарсить, то как подставить? тамнет места для вставки переменной

да ещё заметил что он не все письма видит вуказанном каталоге
Столкнулся с подобной задачей, оставлю тут ответ:
1. Качаем шаблон с готовыми библиотеками из топика VerBin:
mailkit.dll mimekit.dll yandex.ru перенос всех писем из спама в инбокс. пометить как важное. перенести в спам.
2. Вставляем там кубик C# отдельный, который и будем запускать:
C#:
Развернуть Свернуть Копировать
List<string> stringlist = new List<string>();
string email = project.Variables["EMAIL"].Value;
string password = project.Variables["PASSWORD"].Value;

using (var client = new MailKit.Net.Imap.ImapClient()) {
    client.CheckCertificateRevocation = false;
    client.ServerCertificateValidationCallback = (s,c,h,e) => true;
    //client.ServerCertificateValidationCallback = (mysender, certificate, chain, sslPolicyErrors) => { return true; };
   
    client.Connect("imap.yandex.ru", 993, MailKit.Security.SecureSocketOptions.SslOnConnect);
    client.Authenticate(email, password);
   
    // в цикле перебираем все папки:
    foreach (var folder in client.GetFolders(client.PersonalNamespaces[0])) {
        //return(folder.Name);
        project.SendInfoToLog(folder.Name.ToString());
        stringlist.Add(folder.Name.ToString());      
}
   
    client.Disconnect(true);
}
return String.Join(Environment.NewLine, stringlist);
На моей почте (это не яндекс) результат:
75550
 
  • Оценить
Реакции: TeslaCo, BAZAg и Phoenix78
Столкнулся с подобной задачей, оставлю тут ответ:
1. Качаем шаблон с готовыми библиотеками из топика VerBin:
mailkit.dll mimekit.dll yandex.ru перенос всех писем из спама в инбокс. пометить как важное. перенести в спам.
2. Вставляем там кубик C# отдельный, который и будем запускать:
C#:
Развернуть Свернуть Копировать
List<string> stringlist = new List<string>();
string email = project.Variables["EMAIL"].Value;
string password = project.Variables["PASSWORD"].Value;

using (var client = new MailKit.Net.Imap.ImapClient()) {
    client.CheckCertificateRevocation = false;
    client.ServerCertificateValidationCallback = (s,c,h,e) => true;
    //client.ServerCertificateValidationCallback = (mysender, certificate, chain, sslPolicyErrors) => { return true; };
  
    client.Connect("imap.yandex.ru", 993, MailKit.Security.SecureSocketOptions.SslOnConnect);
    client.Authenticate(email, password);
  
    // в цикле перебираем все папки:
    foreach (var folder in client.GetFolders(client.PersonalNamespaces[0])) {
        //return(folder.Name);
        project.SendInfoToLog(folder.Name.ToString());
        stringlist.Add(folder.Name.ToString());     
}
  
    client.Disconnect(true);
}
return String.Join(Environment.NewLine, stringlist);
На моей почте (это не яндекс) результат:
Посмотреть вложение 75550

есть небольшое замечание.
Вот в этом месте
75551

Получение имени папки не вызовет ошибок, а вот если папку брать в работу и пытаться из нее что то считывать может возникнуть исключение , доступ запрещен к папке. причем так может возникнуть на любой папке, а так же может быть что следующие папки будут доступны, но код уже вылетел по ошибке.
Причем если возникает исключение то что бы вернуться к перебору папок, надо начинать с коннекта, так как он сбрасывается.
Мне пришлось сделать список недоступных папок и сделать еще один внешний цикл повтора прохождения по папкам , а так же проверку наличия имени папки в списке плохих папок.
вот такие костыли :)
 
  • Оценить
Реакции: BAZAg и orka13
есть небольшое замечание.
Вот в этом месте
Посмотреть вложение 75551

Получение имени папки не вызовет ошибок, а вот если папку брать в работу и пытаться из нее что то считывать может возникнуть исключение , доступ запрещен к папке. причем так может возникнуть на любой папке, а так же может быть что следующие папки будут доступны, но код уже вылетел по ошибке.
Причем если возникает исключение то что бы вернуться к перебору папок, надо начинать с коннекта, так как он сбрасывается.
Мне пришлось сделать список недоступных папок и сделать еще один внешний цикл повтора прохождения по папкам , а так же проверку наличия имени папки в списке плохих папок.
вот такие костыли :-)
Может поделитесь своим готовым фрагментом кода с сообществом, чтобы каждому по-отдельности не приходилось проходить Ваш путь?
 
Может поделитесь своим готовым фрагментом кода с сообществом, чтобы каждому по-отдельности не приходилось проходить Ваш путь?
да у меня там такие костыли что мама не горюй, сам чешу голову иногда :)
про ошибки с папками интересует ?
 
да у меня там такие костыли что мама не горюй, сам чешу голову иногда :-)
про ошибки с папками интересует ?
У меня пока таких ошибок нет (так как первый раз использую эту библиотечку). Но, в целом думаю инфа в теме не помешала бы - чтобы если вдруг появится, можно было сразу взять готовое решение и не думать о том, все ли исключения обработал, или ещё чего-то может вылезти.
 
готовое решения вряд ли будет, так как у каждого свои задачи для работы с почтой. тупо чекнуть, или принять или из спама в инбокс переложить... ну и тд и тд.
ну суть в общем одна. оборачиваем весь код в try{}catch{} используем метки для удачных/неудачных действий и все это оборачиваем в цикл попыток.
я щас глянул свой код, и ужаснулся :) такое точно выкладывать не буду :)
Я при приеме письма, сделал 2 ветки. при первом проходе считывает только с инбокса и спама. все остальные проходы в цикле перебирает папки. если возникает ошибка то папку добавляю в плохие и уменьшаю попытки. что бы не превратилось в мертвый цикл , то в начале цикла чекаю время работы. 200 секунд. при получении папки в работу чекаю имя папки в плохих.
77274

честно говоря костыль на костыле :ca:
 
  • Оценить
Реакции: DevOps и BAZAg
Спасибо. Решил тоже сделать почтовый чекер для проверки на нужное письмо. Фрагменты кода забрал себе, буду разбираться на досуге
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)