gifts2017

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

Опубликовал test_prof (Intimatik) в раздел Программирование - Практика программирования

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

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

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

и SN можно найти на просторах интернетов
8. test_prof (Intimatik) 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) 21.02.12 13:13
(7) Жадность руководителя - да. За каждую перестановку платить человеку зп или сделку...
Закон сохранения бабла гласит - недоплата гдето - вытекает в переплату после...
10. test_prof (Intimatik) 21.02.12 15:53
(9) iov, безусловно. к сожалению практика общепринята...
11. qweasd qweasdzc (serega3333) 21.02.12 15:55
хорошая тема, как раз многие гуглом пользуются у клиента, можно кстати докрутить и сделать чтобы файлы хранились на гугле
12. Ruslan (rus128) 22.02.12 11:35
Не понял строку Если КоличествоПисем тз.Колонки.Добавить("Получено"); - Тогда уже не обязательно?
13. Ivan Haos (haous) 03.10.12 15:55
А для УТП для Украины 8.2 подойдет данная обработка?
14. ptr (ptr) 03.10.12 16:10
А можно сделать иначе.
Есть fetchmail, который умеет забирать почту у кого угодно и как угодно.
Есть exim, который эту почту умеет обрабатывать и посылать.
Для совсем ленивых, есть еще dbmail, который эту почту еще и в SQL базу данных положит.
Чего еще надобно?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа