При использовании внешней компоненты DialMail.dll в платформе 1С 7.7 разработчики часто сталкиваются с ошибкой подключения к POP3-серверам популярных почтовых сервисов (Mail.ru, Gmail, Yandex). Вызов метода Подключиться() возвращает 0, а программа выдает сообщение "Не смогли подключиться к POP3-серверу". Рассмотрим подробнее, почему возникают подобные сбои и как правильно настроить работу с защищенным соединением SSL/TLS.
Современные почтовые службы требуют обязательно использовать безопасное шифрованное соединение SSL/TLS. Простая передача параметров подключения в DialMail без дополнительной настройки системы приводит к сбою. Проанализируем основные причины неисправности:
DialMail использует внешние динамические библиотеки OpenSSL (в частности, libeay32.dll и ssleay32.dll). Если они отсутствуют в системе, подключение по защищенным портам завершается ошибкой.Чтобы решить проблему с SSL на уровне операционной системы, скопируйте необходимые библиотеки OpenSSL в системные каталоги Windows:
C:\Windows\System32\C:\Windows\SysWOW64\ и C:\Windows\System32\Разберем по шагам реализацию процедуры получения почтовых сообщений. Передадим объекту AddIn.POP3 параметры SSL-подключения, активируем ведение лог-файла для отладки и обработаем ответ сервера.
Процедура Выполнить()
Если ЗагрузитьВнешнююКомпоненту("DialMail.dll") = 0 Тогда
Сообщить("Не удалось обнаружить компоненту DialMail.dll!");
Возврат;
КонецЕсли;
Попытка
ПолучениеПочты = СоздатьОбъект("AddIn.POP3");
SystComm = СоздатьОбъект("AddIn.SystComm");
ПолучениеПочты.ВестиЛогФайл = 1;
Сообщить("Версия компоненты: " + SystComm.Версия);
Исключение
Сообщить("Не удалось создать объекты из компоненты DialMail.dll!");
Возврат;
КонецПопытки;
ПолучениеПочты.РабочийКаталог = РабочийКаталог;
ПолучениеПочты.ИспользоватьПрокси = 0;
ПолучениеПочты.ИспользоватьSSL = 1; // Включаем SSL-шифрование
// Параметры для Mail.ru: pop.mail.ru, порт 995
// Параметры для Gmail: pop.gmail.com, порт 995
Если ПолучениеПочты.Подключиться(Pop3Сервер, Pop3Порт, Pop3Пользователь, Pop3Пароль) = 0 Тогда
Предупреждение("Не смогли подключиться к POP3-серверу");
Возврат;
КонецЕсли;
ВсегоПисемНаСервере = ПолучениеПочты.КоличествоПисем;
ОбщаяДлинаПолучение = Число(ПолучениеПочты.ОбщийРазмерПисем);
Если ВсегоПисемНаСервере > 0 Тогда
Сообщить("Всего писем на сервере = " + ВсегоПисемНаСервере);
Сообщить("Общий объем = " + ОбщаяДлинаПолучение + " байт");
Иначе
Предупреждение("Нет писем для скачивания");
Возврат;
КонецЕсли;
СтрокаНомеровПисем = "";
Если ПолучениеПочты.ПолучитьВсеПисьма(1, 0, 1, СтрокаНомеровПисем) = -100 Тогда
Сообщить("Ошибка при скачивании писем");
Возврат;
КонецЕсли;
РаспаковатьВсеПисьма();
КонецПроцедуры
Для корректного отслеживания ошибок и статуса выполнения загрузки обязательно добавьте в модуль формы или объекта обработчик внешних событий ОбработкаВнешнегоСобытия:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Источник = "POP3" Тогда
Если ВРЕГ(СокрЛП(Событие)) = "RECEIVE" Тогда
Если ВРЕГ(СокрЛП(Данные)) = "DONE" Тогда
Сообщить("Загрузка писем завершена.");
Возврат;
КонецЕсли;
ИначеЕсли ВРЕГ(СокрЛП(Событие)) = "ERROR" Тогда
Сообщить(" Ошибка: " + Данные + " " + СокрЛП(ПолучениеПочты.ПоследняяОшибка));
Сообщить("Последний ответ сервера: " + ПолучениеПочты.ПоследнийОтветСервера);
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Если на сервере или рабочей станции с устаревшей версией Windows возникают проблемы с работой библиотек OpenSSL напрямую через компоненту, можно применить локальный туннель stunnel. Утилита принимает незашифрованные подключения от 1С на локальном адресе и перенаправляет их на внешний почтовый сервер через защищенный канал TLS 1.2/1.3.
Пример настройки конфигурационного файла stunnel.conf:
client = yes
output = stunnel-log.txt
debug = 0
[POP3 Mail]
accept = 127.0.0.1:110
connect = pop.mail.ru:995
[SMTP Mail]
accept = 127.0.0.1:25
connect = smtp.mail.ru:465
При использовании stunnel в коде 1С 7.7 укажите параметры местного подключения без SSL:
Pop3Сервер = "127.0.0.1"Pop3Порт = 110ИспользоватьSSL = 0Протокол POP3 не поддерживает полноценную синхронизацию статусов прочтения, как протокол IMAP. Даже если письмо помечено как прочитанное в веб-интерфейсе, при очередном вызове команды загрузки POP3-сервер снова передаст его клиентской программе.
Чтобы избежать повторной обработки одних и тех же писем и вложений, примените один из следующих подходов: