Прием писем в rambler

lesis

Client
Регистрация
04.07.2019
Сообщения
81
Благодарностей
35
Баллы
18
Письма в почтовике rambler.ru попадают в спам. В итоге кубик при получении всех писем не видит писем. Пробовал и на 7 версии и на 5.
Может кто сталкивался и подскажет как заставить зеннопостер увидеть папку спам в этом случае?
 

Phoenix78

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

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 758
Благодарностей
2 392
Баллы
113
Скачиваю письма из всех папок примерно так:
C#:
int lastHours = 1;   // за последнии часы
bool deleteMessages = true;                                         // удаление сообщений
string code = string.Empty;
string sender = "info@";
string[] theme = new[]{"welcome to", "email code" };
string[] recode = new[]{@"(?<=token=).{64}?(?="")", @"(?<=>).\d{3,10}(?=<)" };
Tuple<string, string, string, string>[] allMails;
try {
allMails = ZennoPoster.BulkMailDownload(email, password, lastHours: lastHours, deleteMessages: deleteMessages);
project.SendInfoToLog("Скачали письма", true);
}
catch {
throw new Exception("Не смогли подключиться к почте...");
}
// Дальше в цикле перебираю найденное согласно отправителю и теме, потом для каждого совпадения ищу нужный токен, и если нашел - выхожу с цикла возвращая токен...
Согласно инструкции по Зенно:
77202


Но, проблема в том, что Рамблер в папке спам удаляет ссылки, и нужный код подтверждения не находится.
Получается, нужно как-то перемещать письма из Спам во Входящие, чтобы ссылка вернулась на место (это при том, что по IMAP Рамблер должен был бы возвращать не искаженное письмо - но в реальности письмо искажается).

Как выходить с подобной ситуации? Придётся писать на запросах заход в ВебМорду или что-то более простое есть для решения данной задачи?

P.S. Перепроверил. Письмо приходит в спам. Ссылка в письме есть. Видимо всё должно работать...
 
Последнее редактирование:
  • Спасибо
Реакции: iph0ne

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
если цель выходить из ситуации, то использовать MailKit.
если цель что то мутить с кубиком приема зенки, то скорее всего это в баги. Но там вряд ли будут решать, я вон завел баг по кубику почты, но не думаю что будет что то путное.
а ZennoPoster.BulkMailDownload это тот же кубик зенки, только в профиль.
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 758
Благодарностей
2 392
Баллы
113
В итоге, нашел ответ ,orka13, оттуда пошел на гитхаб, попробовал собрать MailKit, с наскоку собрать не получилось.
Далее пошел к ответу VerBin, взял там уже готовую скомпилированную dll библиотечку MailKit.
Вынес вот такой код в метод общего кода:
C#:
        public static string GetCode(IZennoPosterProjectModel project, string email, string password, bool spam_to_inbox = true){
            string imap = "imap.rambler.ru";        
            string sender = "info@";
            string[] theme = new[]{"theme 1", "thheme 2" }; // текст, который содержится в теме письма
            string[] recode = new[]{@"(?<=token=).{64}?(?="")", @"(?<=>).\d{3,10}(?=<)" }; // регулярки, которыми выстаскивал содержимое...
            string code = string.Empty;
            using (var client = new MailKit.Net.Imap.ImapClient()) {
                client.CheckCertificateRevocation = false; // здесь видимо важно
                client.ServerCertificateValidationCallback = (s,c,h,e) => true; // здесь видимо важно
                client.Connect(imap, 993, MailKit.Security.SecureSocketOptions.SslOnConnect);
                client.Authenticate(email, password);

                MailKit.IMailFolder inbox = client.Inbox;
                if(spam_to_inbox) {
                    MailKit.IMailFolder spam = client.GetFolder(MailKit.SpecialFolder.Junk);
                    spam.Open(MailKit.FolderAccess.ReadWrite);
                    var uids = spam.Search(MailKit.Search.SearchQuery.All);
                    foreach (var uid in uids) spam.MoveTo(uid, inbox);
                    spam.Close();  
                }
               
                inbox.Open(MailKit.FolderAccess.ReadWrite);
                foreach(var uid in inbox.Search(MailKit.Search.SearchQuery.All)){
                    code = string.Empty;
                    var mess = inbox.GetMessage(uid);              
                    string mess_sender = mess.From.ToArray()[0].ToString();
                    string mess_theme = mess.Subject;
                    string mess_body  =mess.HtmlBody;              
                    if(mess_sender.ToLower().Contains(sender)) {
                        project.SendInfoToLog("Отправитель подходит", true);
                        for(int j=0; j<theme.Length; j++) {
                            code = string.Empty;
                            project.SendInfoToLog("Проверяем тему", true);
                            if(mess_theme.ToLower().Trim().Contains(theme[j])){
                                project.SendInfoToLog("Тема подходит", true);
                                code =  Regex.Match(mess_body, recode[j]).Value;
                                project.SendInfoToLog(string.Format(@"{0} {1}: {1}", email, theme[j], code),true);
                                if(!string.IsNullOrEmpty(code)) {                      
                                    break;
                                }
                            }
                            else {
                                project.SendInfoToLog("Тема НЕ подходит", true);
                            }
                        }
                        if(!string.IsNullOrEmpty(code)){
                            inbox.AddFlags (uid, MessageFlags.Deleted, true);
                            inbox.Expunge();
                            break;
                        }
                    }
                    else {
                        project.SendInfoToLog("Отправитель НЕ подходит - берем следующее", true);
                    }
                }
                client.Disconnect(true);
            }
            return code;
        }

Вызываю его примерно так:
C#:
string email = "[email protected]";
string password = "password";
return CommonCode.GetCode( project,  email,  password, true);
И, наконец-то всё более-менее завелось.
Оказалось, что когда Зеннопостер с коробки тратит на соединение минуту - MailKit за 1-5 секунд уже возвращает ответ.
Также Зеннопостер вообще не хотел соединяться по imap (есть какие-то траблы с рамблером - штук 50 раз соединяется, а потом не хочет соединяться) - и тут MailKit соединяется без проблем.
Есть подозрение, что Зеннопостер видимо открывает соединения и не закрывает их за собой (как было когда-то с базами, сейчас не в курсе в новых версиях как) - что и приводит к тому, что через вебморду заходим - письмо видим, а через imap Зенно - не получаем. Ошибку обнаружил когда отключил подавление ошибок.

Мало ли, вдруг кому-то пригодится....
 

Sardol

Client
Регистрация
23.09.2020
Сообщения
189
Благодарностей
42
Баллы
28
Поставил, теперь так пишет

C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using ZennoLab.CommandCenter.TouchEvents;
using ZennoLab.CommandCenter.FullEmulation;
using ZennoLab.InterfacesLibrary.Enums;
using Mailkit;
using MailKit.Net.Imap;

namespace ZennoLab.OwnCode
{
    public class CommonCode
    {
            public static string GetCode(IZennoPosterProjectModel project, string email, string password, bool spam_to_inbox = true){
            string imap = "imap.rambler.ru";       
            string sender = "info@";
            string[] theme = new[]{"theme 1", "thheme 2" }; // текст, который содержится в теме письма
            string[] recode = new[]{@"(?<=token=).{64}?(?="")", @"(?<=>).\d{3,10}(?=<)" }; // регулярки, которыми выстаскивал содержимое...
            string code = string.Empty;
            using (var client = new MailKit.Net.Imap.ImapClient()) {
                client.CheckCertificateRevocation = false; // здесь видимо важно
                client.ServerCertificateValidationCallback = (s,c,h,e) => true; // здесь видимо важно
                client.Connect(imap, 993, MailKit.Security.SecureSocketOptions.SslOnConnect);
                client.Authenticate(email, password);

                MailKit.IMailFolder inbox = client.Inbox;
                if(spam_to_inbox) {
                    MailKit.IMailFolder spam = client.GetFolder(MailKit.SpecialFolder.Junk);
                    spam.Open(MailKit.FolderAccess.ReadWrite);
                    var uids = spam.Search(MailKit.Search.SearchQuery.All);
                    foreach (var uid in uids) spam.MoveTo(uid, inbox);
                    spam.Close();
                }
              
                inbox.Open(MailKit.FolderAccess.ReadWrite);
                foreach(var uid in inbox.Search(MailKit.Search.SearchQuery.All)){
                    code = string.Empty;
                    var mess = inbox.GetMessage(uid);             
                    string mess_sender = mess.From.ToArray()[0].ToString();
                    string mess_theme = mess.Subject;
                    string mess_body  =mess.HtmlBody;             
                    if(mess_sender.ToLower().Contains(sender)) {
                        project.SendInfoToLog("Отправитель подходит", true);
                        for(int j=0; j<theme.Length; j++) {
                            code = string.Empty;
                            project.SendInfoToLog("Проверяем тему", true);
                            if(mess_theme.ToLower().Trim().Contains(theme[j])){
                                project.SendInfoToLog("Тема подходит", true);
                                code =  Regex.Match(mess_body, recode[j]).Value;
                                project.SendInfoToLog(string.Format(@"{0} {1}: {1}", email, theme[j], code),true);
                                if(!string.IsNullOrEmpty(code)) {                     
                                    break;
                                }
                            }
                            else {
                                project.SendInfoToLog("Тема НЕ подходит", true);
                            }
                        }
                        if(!string.IsNullOrEmpty(code)){
                            inbox.AddFlags (uid, MessageFlags.Deleted, true);
                            inbox.Expunge();
                            break;
                        }
                    }
                    else {
                        project.SendInfoToLog("Отправитель НЕ подходит - берем следующее", true);
                    }
                }
                client.Disconnect(true);
            }
            return code;
        }
    }
}
Screenshot_1.jpg
 

Sardol

Client
Регистрация
23.09.2020
Сообщения
189
Благодарностей
42
Баллы
28

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 758
Благодарностей
2 392
Баллы
113

Вложения

Sardol

Client
Регистрация
23.09.2020
Сообщения
189
Благодарностей
42
Баллы
28
dll у меня лежат в C:\ZP\RU\ZennoPoster Pro\5.47.0.0\Progs\ExternalAssemblies
пример шаблона и архив с dll добавил к этому сообщению

Посмотреть вложение 77728
Посмотреть вложение 77729
Посмотреть вложение 77730
Посмотреть вложение 77731
dll лежат в нужном месте. temp_mailkit.xmlz работает. Ошибка где-то в коде у меня была. Спасибо!
 

ukrainec2014

Client
Регистрация
12.05.2017
Сообщения
348
Благодарностей
51
Баллы
28
Помогите разобраться с этим mailkit
шаблон не работает у меня

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


88858
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
Помогите разобраться с этим mailkit
шаблон не работает у меня
небось версия зенки 7.6 или 7.7 ?
а вот сюрприз от разрабов ;-) теперь в зенке своя версия майлкит и она 100% конфликтует с другими версиями :D

88859
 

ukrainec2014

Client
Регистрация
12.05.2017
Сообщения
348
Благодарностей
51
Баллы
28

Phoenix78

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

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 758
Благодарностей
2 392
Баллы
113
Помогите разобраться с этим mailkit
шаблон не работает у меня


мне пригодится, спасибо на кошелек закину
а то кубик приема почты перестал работать, не могу понять что за дела, хочу попробовать этот вариант...


Посмотреть вложение 88858
Взять нужно DLL с папки с Зенно и забросить в папку с библиотеками (заменить короче старый на новый).
 
  • Спасибо
Реакции: Lest

Lest

Client
Регистрация
20.03.2020
Сообщения
39
Благодарностей
21
Баллы
8
Всегда хотелось в проектах использовать дешёвые почты рамблера. Но всегда я с этой почтой был не в ладах. У меня всегда выскакивали ошибки в кубике приёма писем. Обновлял зенку, а баг никак не фиксят. Наконец-то нашёл решение в этой теме. Спасибо огромное BAZAg. Скачал его шаблон и dll, заменил файлы, но всё равно выскакивали ошибки, подправил код, и наконец заработало. В итоге вошёл в азарт и сделал ещё 2 дополнительные функции.

1. Получать почту с рамблера через проект в проекте.
2. Можно обойтись без просмотра письма в браузере. Можно спарсить отправителей всех писем, затем как узнаем нужного, парсим письмо, потом создаём регулрку и парсим ссылку.

Итак, по порядку.
1) разархивируем архив
2) скидываем с заменой dll файлы в папку с зенно и в ExternalAssemblies
3) открываем "Кубик вызывающий рамблер", копируем кубик в ваш проект
4) заполняем переменные емейл, пароль и WhatPars
5) изменяем путь до "Получение письма с рамблер"
6) тестируем, по идеи должно работать
6.1) Если вы уже знаете мыло отправителя и регулярку на ссылку, то заполняем переменные и запускаем кубик, если нет, то...
6.2) Сначала вводим в WhatPars цифру 1 и запускаем кубик. Затем из переменной {-Variable.ActivateLink-} узнаём мыло сендера и вставляем его в переменную {-Variable.sender-}
6.3) Вводим в WhatPars цифру 2 и снова запускаем кубик. Затем в {-Variable.ActivateLink-} будет внутрянка письма.
6.4) Делаем регулярку на ссылку
6.5) Вводим в WhatPars цифру 3 и вставляем в переменную {-Variable.regexOnLink-} регулярку и снова запускаем кубик, должна прийти ссылка.
 

Вложения

Регистрация
15.04.2016
Сообщения
616
Благодарностей
104
Баллы
43
Kopeechka.store
Рамблеры по 3 копейки
Два наших кубика скопировали, вставили, и все. Достанем письмо из любой папки 8-)
 

Evgeni215873

Client
Регистрация
20.05.2022
Сообщения
19
Благодарностей
2
Баллы
3
Всегда хотелось в проектах использовать дешёвые почты рамблера. Но всегда я с этой почтой был не в ладах. У меня всегда выскакивали ошибки в кубике приёма писем. Обновлял зенку, а баг никак не фиксят. Наконец-то нашёл решение в этой теме. Спасибо огромное BAZAg. Скачал его шаблон и dll, заменил файлы, но всё равно выскакивали ошибки, подправил код, и наконец заработало. В итоге вошёл в азарт и сделал ещё 2 дополнительные функции.

1. Получать почту с рамблера через проект в проекте.
2. Можно обойтись без просмотра письма в браузере. Можно спарсить отправителей всех писем, затем как узнаем нужного, парсим письмо, потом создаём регулрку и парсим ссылку.

Итак, по порядку.
1) разархивируем архив
2) скидываем с заменой dll файлы в папку с зенно и в ExternalAssemblies
3) открываем "Кубик вызывающий рамблер", копируем кубик в ваш проект
4) заполняем переменные емейл, пароль и WhatPars
5) изменяем путь до "Получение письма с рамблер"
6) тестируем, по идеи должно работать
6.1) Если вы уже знаете мыло отправителя и регулярку на ссылку, то заполняем переменные и запускаем кубик, если нет, то...
6.2) Сначала вводим в WhatPars цифру 1 и запускаем кубик. Затем из переменной {-Variable.ActivateLink-} узнаём мыло сендера и вставляем его в переменную {-Variable.sender-}
6.3) Вводим в WhatPars цифру 2 и снова запускаем кубик. Затем в {-Variable.ActivateLink-} будет внутрянка письма.
6.4) Делаем регулярку на ссылку
6.5) Вводим в WhatPars цифру 3 и вставляем в переменную {-Variable.regexOnLink-} регулярку и снова запускаем кубик, должна прийти ссылка.
бро помоги настроить.
 

Evgeni215873

Client
Регистрация
20.05.2022
Сообщения
19
Благодарностей
2
Баллы
3
Всегда хотелось в проектах использовать дешёвые почты рамблера. Но всегда я с этой почтой был не в ладах. У меня всегда выскакивали ошибки в кубике приёма писем. Обновлял зенку, а баг никак не фиксят. Наконец-то нашёл решение в этой теме. Спасибо огромное BAZAg. Скачал его шаблон и dll, заменил файлы, но всё равно выскакивали ошибки, подправил код, и наконец заработало. В итоге вошёл в азарт и сделал ещё 2 дополнительные функции.

1. Получать почту с рамблера через проект в проекте.
2. Можно обойтись без просмотра письма в браузере. Можно спарсить отправителей всех писем, затем как узнаем нужного, парсим письмо, потом создаём регулрку и парсим ссылку.

Итак, по порядку.
1) разархивируем архив
2) скидываем с заменой dll файлы в папку с зенно и в ExternalAssemblies
3) открываем "Кубик вызывающий рамблер", копируем кубик в ваш проект
4) заполняем переменные емейл, пароль и WhatPars
5) изменяем путь до "Получение письма с рамблер"
6) тестируем, по идеи должно работать
6.1) Если вы уже знаете мыло отправителя и регулярку на ссылку, то заполняем переменные и запускаем кубик, если нет, то...
6.2) Сначала вводим в WhatPars цифру 1 и запускаем кубик. Затем из переменной {-Variable.ActivateLink-} узнаём мыло сендера и вставляем его в переменную {-Variable.sender-}
6.3) Вводим в WhatPars цифру 2 и снова запускаем кубик. Затем в {-Variable.ActivateLink-} будет внутрянка письма.
6.4) Делаем регулярку на ссылку
6.5) Вводим в WhatPars цифру 3 и вставляем в переменную {-Variable.regexOnLink-} регулярку и снова запускаем кубик, должна прийти ссылка.
нужна помощь
 

DevOps

Client
Регистрация
30.11.2020
Сообщения
495
Благодарностей
311
Баллы
63
Добрый вечер
Как победить такой ответ из кода MailKit


C#:
                        foreach(var dodo in lines_contains)
                        {
                            var query = MailKit.Search.SearchQuery.FromContains(dodo);
                            var inbox_contains = query.ToString();
                          //  Console.WriteLine(inbox_contains);
                            foreach (var uid in inbox_contains)
                            {
                                Console.WriteLine(uid);
                            }
Ответ такого вида
MailKit.Search.TextSearchQuery
-----------
Есть список с которого берутся несколько адресов и проверяется поступление свежих писем с этих адресов в цикле на рабочих списке электронной почты
 

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