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("Не смогли подключиться к почте...");
}
// Дальше в цикле перебираю найденное согласно отправителю и теме, потом для каждого совпадения ищу нужный токен, и если нашел - выхожу с цикла возвращая токен...
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;
}
string email = "email@rambler.ru";
string password = "password";
return CommonCode.GetCode( project, email, password, true);
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;
}
}
}

dll у меня лежат в C:\ZP\RU\ZennoPoster Pro\5.47.0.0\Progs\ExternalAssemblies
пример шаблона и архив с dll добавил к этому сообщению
Посмотреть вложение 77728
Посмотреть вложение 77729
Посмотреть вложение 77730
Посмотреть вложение 77731
мне пригодится, спасибо на кошелек закинуМало ли, вдруг кому-то пригодится....
небось версия зенки 7.6 или 7.7 ?Помогите разобраться с этим mailkit
шаблон не работает у меня
теперь в зенке своя версия майлкит и она 100% конфликтует с другими версиями 
таки да) 7.6небось версия зенки 7.6 или 7.7 ?
норм будет на версии 7.4 или если заюзать версию dll из самой зенки.таки да) 7.6
то есть поставить 7.7 и норм будет?
Взять нужно DLL с папки с Зенно и забросить в папку с библиотеками (заменить короче старый на новый).Помогите разобраться с этим mailkit
шаблон не работает у меня
мне пригодится, спасибо на кошелек закину
а то кубик приема почты перестал работать, не могу понять что за дела, хочу попробовать этот вариант...
Посмотреть вложение 88858

бро помоги настроить.Всегда хотелось в проектах использовать дешёвые почты рамблера. Но всегда я с этой почтой был не в ладах. У меня всегда выскакивали ошибки в кубике приёма писем. Обновлял зенку, а баг никак не фиксят. Наконец-то нашёл решение в этой теме. Спасибо огромное 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-} регулярку и снова запускаем кубик, должна прийти ссылка.
нужна помощьВсегда хотелось в проектах использовать дешёвые почты рамблера. Но всегда я с этой почтой был не в ладах. У меня всегда выскакивали ошибки в кубике приёма писем. Обновлял зенку, а баг никак не фиксят. Наконец-то нашёл решение в этой теме. Спасибо огромное 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-} регулярку и снова запускаем кубик, должна прийти ссылка.
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);
}
проблемка возникает, когда от того же адреса надо получить код.Всегда хотелось в проектах использовать дешёвые почты рамблера. Но всегда я с этой почтой был не в ладах. У меня всегда выскакивали ошибки в кубике приёма писем. Обновлял зенку, а баг никак не фиксят. Наконец-то нашёл решение в этой теме. Спасибо огромное 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-} регулярку и снова запускаем кубик, должна прийти ссылка.
Найди в общем коде:f
проблемка возникает, когда от того же адреса надо получить код.
Отправил 4 почты с кодами. И шаблон всегда берет первую. Можно как-то это поправить?
B там в общем коде такая строка:
string theme = "Activate Your Webshare Account"; // совпадение по теме
Как будто это не правильная строчка.
Можно как-то добавить поиск в в почте последнего письма с заданной темой письма?
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;
}
}
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; // Возвращаем тело последнего подходящего письма
}
}


