Получение почты с сервера использующего SSL

Программирование - Практика программирования

Получаем почту с gmail, microsoft exchange server

Долго бился с проблемой получения почту в 1С, вот мой вариант решения:

 

Все знают о богатых настройках встроенного в платформу почтового клиента .

Я столкнулся с тем что с его помощью невозможно получить почту через ssl. После плясок с бубном по создания ssl-тунеля была найдена замечательная библиотека - EmailArchitect GetMail (приаттачена к публикации)

Она не только замечательно умеет работать с ssl, но и парсит html-код , ищет по разным полям и вообще ведёт себя лучшим образом. 

 

В данном примере я постарался затронуть основные функции getmail полезные для автоматизации работы с почтой:

1.Получение писем

2.Поиск 

3.Навигация по папкам

4.Чтение заголовков

//создаём коннект

oServer = Новый COMОбъект("EAGetMailObj.MailServer");
oClient = Новый COMОбъект ("EAGetMailObj.MailClient");
oClient.LicenseCode = "TryIt";
oServer.Server = "mail.mail.ru";
oServer.User ="vova.putin";
oServer.Password = "kremlin2012";
oServer.Protocol = 1;
oServer.SSLConnection = True;
oServer.Port = 993;
Попытка
oClient.Connect(oServer);
Исключение
КонецПопытки;


//если много папок заходим только в папку входящие
for each folder in oClient.Imap4Folders do
Если folder.Name = "INBOX" then
for each Subfolder in folder.SubFolders do
Если Subfolder.Name = "Рассылки" then
folder = Subfolder;
КонецЕсли;
enddo;
Прервать;
EndIf;
enddo;

oClient.SelectFolder(folder) ;

//отбираем все письма за сегодня
МассивЧисла=ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Формат(ТекущаяДата(), "Л=en_GB; ДЛФ=DD")," ");
Число = МассивЧисла[0]+"-"+ВРег(лев(МассивЧисла[1],3))+"-"+МассивЧисла[2];

arInfo=oClient.SearchMail("ALL ON "+Число);
КоличествоПисем=arInfo.getupperbound()+1;
i=0;
Запрос = Новый запрос;

Запрос.Текст = "ВЫБРАТЬ
| Рассылки.Строка
|ИЗ
| РегистрСведений.Рассылки КАК МК_Рассылки";
тз = запрос.Выполнить().Выгрузить();

Если КоличествоПисем тз.Колонки.Добавить("Получено");

тз.ЗаполнитьЗначения(Ложь,"Получено");

//читаем все письма из коллекции

пока i<>КоличествоПисем Цикл
info = arInfo.getvalue(i);
oMail = oClient.GetMail(info);
i=i+1;
для каждого рассылка из тз Цикл
Если Найти(oMail.Subject,СокрЛП(рассылка.строка))>0 Тогда
рассылка.получено=Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;

КонецЕсли;

oClient.Quit();

 

 

Скачать файлы

Наименование Файл Версия Размер
EA_ARCHITECT_GETMAIL_COM
.exe 1,65Mb
17.02.12
62
.exe 1,65Mb 62 Скачать

См. также

Комментарии
1. Олег Кострицын (recon) 34 20.02.12 13:14 Сейчас в теме
Как я понимаю, работать полноценно с IMAP она не умеет, нет методов копирования/перемещения писем по папкам. Еще, судя по примерам, в компоненте нет нормального обработчика ошибок.Данные об ошибке при подключении в 1С как то отображаются/обрабатываются ?
А так плюс компоненте что бесплатная, но пока что все равно пользуюсь http://www.chilkatsoft.com/imap-activex.asp
2. Александр Зубцов (iov) 361 20.02.12 13:17 Сейчас в теме
(0) Я не правильно прочитал или компонента стоит денег?
3. Олег Кострицын (recon) 34 20.02.12 14:13 Сейчас в теме
Сорри, касаемо бесплатной это я погорячился. Она только Free Trial :( А так chilkatsoft на разработчика даже дешевле выходит.
4. andrewks 1197 20.02.12 15:13 Сейчас в теме
не, уж лучше через туннель. по крайней мере, бесплатно
5. andrewks 1197 20.02.12 15:25 Сейчас в теме
вот здесь есть интересная инфа, может, автор найдёт там более удачное решение:
http://www.coastrd.com/smtps
6. test_prof (Intimatik) 19 21.02.12 12:41 Сейчас в теме
(1) recon,

c imap работает полноценно, ошибки тоже обрабатываются.

Прошу прощения если пример куцый, постарался наиболее кратко описать основной функционал которым я пользуюсь :)
7. test_prof (Intimatik) 19 21.02.12 12:44 Сейчас в теме
(2) iov, жадность лечится периодической переустановкой :)

и SN можно найти на просторах интернетов
8. test_prof (Intimatik) 19 21.02.12 12:46 Сейчас в теме
(5) andrewks, не понял что имеется ввиду. это же просто RFC

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

cryptlib is a very complete encryption library developed by Peter Gutmann over a number of years. cryptlib allows even inexperienced programmers to easily add SLL (and encryption) to their software. We are very lucky to have such a high quality library available as open source. cryptlib uses industry-standard X.509, S/MIME, and ssh/SSL/TLS data formats, the resulting encrypted or signed data can be easily transported to other systems and processed there, and cryptlib itself runs on any commonly-user operating system. Multi-threaded cryptlib Operation cryptlib is re-entrant and completely thread-safe.
9. Александр Зубцов (iov) 361 21.02.12 13:13 Сейчас в теме
(7) Жадность руководителя - да. За каждую перестановку платить человеку зп или сделку...
Закон сохранения бабла гласит - недоплата гдето - вытекает в переплату после...
10. test_prof (Intimatik) 19 21.02.12 15:53 Сейчас в теме
(9) iov, безусловно. к сожалению практика общепринята...
11. qweasd qweasdzc (serega3333) 21.02.12 15:55 Сейчас в теме
хорошая тема, как раз многие гуглом пользуются у клиента, можно кстати докрутить и сделать чтобы файлы хранились на гугле
12. Ruslan Odessa (rus128) 2 22.02.12 11:35 Сейчас в теме
Не понял строку Если КоличествоПисем тз.Колонки.Добавить("Получено"); - Тогда уже не обязательно?
13. Ivan Haos (haous) 03.10.12 15:55 Сейчас в теме
А для УТП для Украины 8.2 подойдет данная обработка?
14. ptr (ptr) 3 03.10.12 16:10 Сейчас в теме
А можно сделать иначе.
Есть fetchmail, который умеет забирать почту у кого угодно и как угодно.
Есть exim, который эту почту умеет обрабатывать и посылать.
Для совсем ленивых, есть еще dbmail, который эту почту еще и в SQL базу данных положит.
Чего еще надобно?
Оставьте свое сообщение