Как взять несколько писем?

backoff

Client
Регистрация
20.04.2015
Сообщения
5 927
Благодарностей
6 389
Баллы
113
Первый раз сталкиваюсь с такой ситуацией. В общем такая тема.

Есть 1 емайл, на него приходят письма, с разной временной задержкой в несколько дней ...
Нужно взять все письма, в названиях которых есть определенный текст, по региксу в общем, в названии меняется только домен, по домену ориентироваться нельзя, так как не знаешь какой когда прилетит.
Можно ли как-то это выгрузить в список, а потом распарсить?
Ну или брать каждый раз по одному письму сверху поочередно с удалением и его смотреть, тоже не нашел как такое можно сделать.

Подскажите, может кто уже сталкивался с таким.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 478
Благодарностей
8 692
Баллы
113
Можно ли как-то это выгрузить в список, а потом распарсить?
На форуме было описание C# метода получения писем в список.
По 1 письму тоже можно брать и сразу удалять, но быстрее будет взять именно первым способом.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
этот код под свои нужды можно и нужно модифицировать

C#:
    Tuple<string, string, string, string>[] allMails;
    allMails = ZennoPoster.BulkMailDownload(project.Variables["Login"].Value, project.Variables["PASSWORD_Email"].Value, proxyString: project.Variables["ProxyAkk_Mail"].Value ,lastHours: 2, deleteMessages: true);
    foreach(Tuple<string, string, string, string> tuple in allMails)
    {
        // tuple.Item1 - sibject, tuple.Item2 - from, tuple.Item3 - html message, tuple.Item4 - text message
        string data = "";
        try{ data = Macros.TextProcessing.Regex(tuple.Item4, @"https://.*", "0")[0].FirstOrDefault(); } catch{}
        if (data!="") {
            project.Variables["URL"].Value = data;
            return 0;
        }
    }
 
  • Спасибо
Реакции: orka13 и Sergodjan

backoff

Client
Регистрация
20.04.2015
Сообщения
5 927
Благодарностей
6 389
Баллы
113
А как этот сниппет заюзать? )))
Я не шарю в шарпе

переменные создал, все добавил, запустил, пишет просто "ок"
 
Последнее редактирование:

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 478
Благодарностей
8 692
Баллы
113
А как этот сниппет заюзать? )))
Я не шарю в шарпе

переменные создал, все добавил, запустил, пишет просто "ок"
Вот тут есть вариант подходящего снипета - принимает письма и запихивает их в таблицу.
(самый последний снипет, их там 3 штуки)
Ну и из таблицы берем строки и проверяем, ищем нужные письма.
 
Последнее редактирование:

backoff

Client
Регистрация
20.04.2015
Сообщения
5 927
Благодарностей
6 389
Баллы
113
Да, видел этот сниппет, тоже пробовал его, ничего не вышло, делал таблицу, вписывал нужные значения ... выдает так же - ок
ничто никуда не добавляется
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
524
Благодарностей
256
Баллы
63
выдает так же - ок
ничто никуда не добавляется
это все слова, только вам известно что вам нужно получить из почты!
А так это обычный кортеж в который помещается вся почта и потом перебирается циклом в поисках нужного нам письма. Цикл дорабатывается под свои нужды уже по месту!
Например так!


PHP:
foreach(Tuple<string, string, string, string> tuple in allMails)
    {
        project.SendInfoToLog(tuple.Item1);
        project.SendInfoToLog(tuple.Item2);
        project.SendInfoToLog(tuple.Item3);
        project.SendInfoToLog(tuple.Item4);
        
            if(tuple.Item1.ToLower().Contains("восстановление"))//проверяем тему письма
            {
                project.SendInfoToLog("Письмо найдено", true);//
                link = new Regex(@"тут регулярка").Match(tuple.Item3).Value;//выпарсиваем  ссылку
                if (link!=String.Empty) break;//ссылка получена, выходим из цикла
            }

    }
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 927
Благодарностей
6 389
Баллы
113
пишет такое
C#:
Тип    Время    Сообщение
    08:53:15    Компиляция кода  Ошибка в действии "CS0103" "Имя "link" отсутствует в текущем контексте". [Строка: 15; Cтолбец: 8]
давайте опишу более подробно, для более лучшего понимания
приходят письма такого плана

тема письма:
C#:
ваш сайт site.zone был добавлен куда-то не понятно куда
ваш сайт site2.zone был добавлен куда-то не понятно куда
ваш сайт site3.zone был добавлен куда-то не понятно куда
содержимое тоже одинаковое, отличается только сайтами.
как я вижу:
1. берем темы в список по регулярке
2. берем из списка первую строку
3. проверяем мыльник на содержание данной темы. если есть, то парсим письмо.
4. удаляем мыло

Можно под это дело просто готовый шарп с вводными данными как лог-пасс, можно без прокси?
Я в синтаксисе плохо шарю поэтому соединять 2 кода - сложно
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
вот код принимает,удаляет и складывает в список.
C#:
string Login = "login";                                                // логин
string PASSWORD_Email = "pas";                                        // пароль
int lastHours = 100;                                                 // за последнии часы
bool deleteMessages = true;                                         // удаление сообщений
var list = project.Lists["List1"];                                  // куда складываем письма
//------------------------------------------------------------------//
Tuple<string, string, string, string>[] allMails;
allMails = ZennoPoster.BulkMailDownload(Login, PASSWORD_Email,lastHours: lastHours, deleteMessages: deleteMessages);
foreach(Tuple<string, string, string, string> tuple in allMails)
{
    list.Add(tuple.Item4);
}
 
  • Спасибо
Реакции: Dodgy и backoff

backoff

Client
Регистрация
20.04.2015
Сообщения
5 927
Благодарностей
6 389
Баллы
113
Поправил.
Странно, почему-то работает, получает темы писем, но выдает как ошибку
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
Тип Время Сообщение
09:44:02 "обработчик писем System.Exception: Ошибка подключения к серверу IMAP
в ZennoLab.MailHandler.MailCollector.EmailClient.tFbppFdjfi2()
в ZennoLab.MailHandler.MailCollector.EmailClient.Connect()
в ZennoLab.ZennoPoster.Modules.Email.MailDownloader.d7BXw5PPvxr()"
вот в новом проекте выполнил
47866
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
Тип Время Сообщение
09:44:02 "обработчик писем System.Exception: Ошибка подключения к серверу IMAP
в ZennoLab.MailHandler.MailCollector.EmailClient.tFbppFdjfi2()
в ZennoLab.MailHandler.MailCollector.EmailClient.Connect()
в ZennoLab.ZennoPoster.Modules.Email.MailDownloader.d7BXw5PPvxr()"
может версия зенки старая ?
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 927
Благодарностей
6 389
Баллы
113
Разобрался...
Код работает. Большое спасибо.

Сначала по невнимательности, неправильно логин указал, сделал ошибку в букве.
Во втором случае, когда все работало, но выдавало ошибку - это изза того что в кубике шарпа, было указано возвращать переменную, но в поле переменной было пусто
 

Dodgy

Client
Регистрация
28.05.2010
Сообщения
107
Благодарностей
12
Баллы
18
вот код принимает,удаляет и складывает в список.
C#:
string Login = "login";                                                // логин
string PASSWORD_Email = "pas";                                        // пароль
int lastHours = 100;                                                 // за последнии часы
bool deleteMessages = true;                                         // удаление сообщений
var list = project.Lists["List1"];                                  // куда складываем письма
//------------------------------------------------------------------//
Tuple<string, string, string, string>[] allMails;
allMails = ZennoPoster.BulkMailDownload(Login, PASSWORD_Email,lastHours: lastHours, deleteMessages: deleteMessages);
foreach(Tuple<string, string, string, string> tuple in allMails)
{
    list.Add(tuple.Item4);
}
Привет, все работает отлично, подскажи пожалуйста, можешь изменить код что бы сохранять не текстом а html?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113

Dodgy

Client
Регистрация
28.05.2010
Сообщения
107
Благодарностей
12
Баллы
18

Dodgy

Client
Регистрация
28.05.2010
Сообщения
107
Благодарностей
12
Баллы
18
Подскажите пожалуйста, как сделать так что бы не за последние 100 часов (int lastHours = 100;-), а брались все письма брались что есть.
 

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