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

lesis

Client
Joined
Jul 4, 2019
Messages
89
Reaction score
35
Points
18
Письма в почтовике rambler.ru попадают в спам. В итоге кубик при получении всех писем не видит писем. Пробовал и на 7 версии и на 5.
Может кто сталкивался и подскажет как заставить зеннопостер увидеть папку спам в этом случае?
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113

BAZAg

Client
Joined
Nov 8, 2015
Messages
1,798
Reaction score
2,483
Points
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. Перепроверил. Письмо приходит в спам. Ссылка в письме есть. Видимо всё должно работать...
 
Last edited:
  • Thank you
Reactions: iph0ne

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
если цель выходить из ситуации, то использовать MailKit.
если цель что то мутить с кубиком приема зенки, то скорее всего это в баги. Но там вряд ли будут решать, я вон завел баг по кубику почты, но не думаю что будет что то путное.
а ZennoPoster.BulkMailDownload это тот же кубик зенки, только в профиль.
 
  • Thank you
Reactions: BAZAg

BAZAg

Client
Joined
Nov 8, 2015
Messages
1,798
Reaction score
2,483
Points
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@rambler.ru";
string password = "password";
return CommonCode.GetCode( project,  email,  password, true);
И, наконец-то всё более-менее завелось.
Оказалось, что когда Зеннопостер с коробки тратит на соединение минуту - MailKit за 1-5 секунд уже возвращает ответ.
Также Зеннопостер вообще не хотел соединяться по imap (есть какие-то траблы с рамблером - штук 50 раз соединяется, а потом не хочет соединяться) - и тут MailKit соединяется без проблем.
Есть подозрение, что Зеннопостер видимо открывает соединения и не закрывает их за собой (как было когда-то с базами, сейчас не в курсе в новых версиях как) - что и приводит к тому, что через вебморду заходим - письмо видим, а через imap Зенно - не получаем. Ошибку обнаружил когда отключил подавление ошибок.

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

Sardol

Client
Joined
Sep 23, 2020
Messages
193
Reaction score
45
Points
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
Joined
Sep 23, 2020
Messages
193
Reaction score
45
Points
28

BAZAg

Client
Joined
Nov 8, 2015
Messages
1,798
Reaction score
2,483
Points
113
dll у меня лежат в C:\ZP\RU\ZennoPoster Pro\5.47.0.0\Progs\ExternalAssemblies
пример шаблона и архив с dll добавил к этому сообщению

77728

77729

77730

77731
 

Attachments

Sardol

Client
Joined
Sep 23, 2020
Messages
193
Reaction score
45
Points
28

ukrainec2014

Client
Joined
May 12, 2017
Messages
351
Reaction score
52
Points
28
Помогите разобраться с этим mailkit
шаблон не работает у меня

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


88858
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
Помогите разобраться с этим mailkit
шаблон не работает у меня
небось версия зенки 7.6 или 7.7 ?
а вот сюрприз от разрабов ;-) теперь в зенке своя версия майлкит и она 100% конфликтует с другими версиями :D

88859
 

ukrainec2014

Client
Joined
May 12, 2017
Messages
351
Reaction score
52
Points
28
небось версия зенки 7.6 или 7.7 ?
таки да) 7.6
то есть поставить 7.7 и норм будет?
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
таки да) 7.6
то есть поставить 7.7 и норм будет?
норм будет на версии 7.4 или если заюзать версию dll из самой зенки.
 

BAZAg

Client
Joined
Nov 8, 2015
Messages
1,798
Reaction score
2,483
Points
113
Помогите разобраться с этим mailkit
шаблон не работает у меня


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


View attachment 88858
Взять нужно DLL с папки с Зенно и забросить в папку с библиотеками (заменить короче старый на новый).
 
  • Thank you
Reactions: Lest

Lest

Client
Joined
Mar 20, 2020
Messages
78
Reaction score
81
Points
18
Всегда хотелось в проектах использовать дешёвые почты рамблера. Но всегда я с этой почтой был не в ладах. У меня всегда выскакивали ошибки в кубике приёма писем. Обновлял зенку, а баг никак не фиксят. Наконец-то нашёл решение в этой теме. Спасибо огромное 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-} регулярку и снова запускаем кубик, должна прийти ссылка.
 

Attachments

Joined
Apr 15, 2016
Messages
649
Reaction score
107
Points
43
Kopeechka.store
Рамблеры по 3 копейки
Два наших кубика скопировали, вставили, и все. Достанем письмо из любой папки 8-)
 

Evgeni215873

Client
Joined
May 20, 2022
Messages
33
Reaction score
4
Points
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-} регулярку и снова запускаем кубик, должна прийти ссылка.
бро помоги настроить.
 

Evgeni215873

Client
Joined
May 20, 2022
Messages
33
Reaction score
4
Points
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-} регулярку и снова запускаем кубик, должна прийти ссылка.
нужна помощь
 

DevOps

Client
Joined
Nov 30, 2020
Messages
496
Reaction score
315
Points
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
-----------
Есть список с которого берутся несколько адресов и проверяется поступление свежих писем с этих адресов в цикле на рабочих списке электронной почты
 

spbalexpiter

Client
Joined
Nov 24, 2013
Messages
419
Reaction score
97
Points
28
f
Всегда хотелось в проектах использовать дешёвые почты рамблера. Но всегда я с этой почтой был не в ладах. У меня всегда выскакивали ошибки в кубике приёма писем. Обновлял зенку, а баг никак не фиксят. Наконец-то нашёл решение в этой теме. Спасибо огромное 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-} регулярку и снова запускаем кубик, должна прийти ссылка.
проблемка возникает, когда от того же адреса надо получить код.
Отправил 4 почты с кодами. И шаблон всегда берет первую. Можно как-то это поправить?

B там в общем коде такая строка:

string theme = "Activate Your Webshare Account"; // совпадение по теме

Как будто это не правильная строчка.
Можно как-то добавить поиск в в почте последнего письма с заданной темой письма?
 
Last edited:

Lest

Client
Joined
Mar 20, 2020
Messages
78
Reaction score
81
Points
18
f

проблемка возникает, когда от того же адреса надо получить код.
Отправил 4 почты с кодами. И шаблон всегда берет первую. Можно как-то это поправить?

B там в общем коде такая строка:

string theme = "Activate Your Webshare Account"; // совпадение по теме

Как будто это не правильная строчка.
Можно как-то добавить поиск в в почте последнего письма с заданной темой письма?
Найди в общем коде:

C#:
inbox.Open(MailKit.FolderAccess.ReadWrite);
foreach(var uid in inbox.Search(MailKit.Search.SearchQuery.All)){
    var mess = inbox.GetMessage(uid);               
    string mess_sender = mess.From.ToArray()[0].ToString();
    string mess_body = mess.HtmlBody;
    if(mess_sender.ToLower().Contains(sender)) {
        project.SendInfoToLog("Отправитель подходит", true);
        return mess_body;
    }
}
И замени на:

C#:
inbox.Open(MailKit.FolderAccess.ReadWrite);

// Получаем все UID'ы писем
var uids = inbox.Search(MailKit.Search.SearchQuery.All);

// Перебираем UID'ы в обратном порядке
for (int i = uids.Count - 1; i >= 0; i--)
{
    var uid = uids[i];
    var mess = inbox.GetMessage(uid);
    string mess_sender = mess.From.ToArray()[0].ToString();
    string mess_body = mess.HtmlBody;

    if (mess_sender.ToLower().Contains(sender))
    {
        project.SendInfoToLog("Отправитель подходит", true);
        return mess_body; // Возвращаем тело последнего подходящего письма
    }
}
Если что, не проверял, чат жпт написал. Но вроде должно работать)
 

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)