Работа со старыми версиями платформы 1С (например, 8.2.19) накладывает определенные ограничения при взаимодействии с современными почтовыми сервисами, такими как Яндекс.Основная сложность заключается в том, что старые версии 1С не поддерживают современные протоколы шифрования SSL/TLS, которые сейчас являются обязательными для Яндекса. В этой статье мы подробно разберем, как решить задачу подключения почты по протоколу IMAP и SMTP, используя утилиту Stunnel, а также рассмотрим альтернативный способ отправки через CDO.
Программа Stunnel выступает в роли посредника: 1С подключается к Stunnel по обычному незащищенному соединению (через локальный адрес 127.0.0.1), а Stunnel «оборачивает» этот трафик в SSL и передает его на сервер Яндекса. Рассмотрим настройку этого процесса по шагам.
Шаг 1. Настройка конфигурационного файла Stunnel (stunnel.conf)
Для начала нам нужно прописать параметры подключения к серверам Яндекса. Откроем файл конфигурации Stunnel и добавим в него следующие секции. Важно правильно указать порты: Яндекс принимает IMAP на порту 993, а SMTP на порту 465.
[yandex-pop3]
client = yes
accept = 127.0.0.1:110
connect = pop.yandex.ru:995
verify = 2
CAfile = ca-certs.pem
checkHost = pop.yandex.ru
[yandex-imap]
client = yes
accept = 127.0.0.1:143
connect = imap.yandex.ru:993
verify = 0
[yandex-smtp]
client = yes
accept = 127.0.0.1:25
connect = smtp.yandex.ru:465
verify = 0
Разберем, что значат эти параметры. Поле accept указывает адрес и порт, который Stunnel будет «слушать» на вашем компьютере. Поле connect — это реальный адрес сервера Яндекса. Обратите внимание, что для IMAP мы используем локальный порт 143, а для SMTP — 25. Параметр verify = 0 в некоторых случаях необходим для упрощения работы с сертификатами, если возникают ошибки проверки.
Шаг 2. Настройка подключения в 1С
Теперь проанализируем ситуацию в самой 1С. Поскольку мы используем Stunnel, в настройках почтового профиля 1С мы должны указывать не серверы Яндекса, а наш локальный адрес. Разберем пример кода для подключения:
Профиль = Новый ИнтернетПочтовыйПрофиль;
// Вместо imap.yandex.ru указываем локальный хост, где запущен Stunnel
Профиль.АдресСервераIMAP = "127.0.0.1";
Профиль.ПортIMAP = 143; // Порт, указанный в поле 'accept' конфига Stunnel
Профиль.АдресСервераSMTP = "127.0.0.1";
Профиль.ПортSMTP = 25;
Профиль.Пользователь = "your_login@yandex.ru";
// ВАЖНО: используйте пароль приложения, а не основной пароль от почты
Профиль.Пароль = "ваш_пароль_приложения";
ИнтернетПочта = Новый ИнтернетПочта;
Попытка
ИнтернетПочта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP);
Сообщить("Соединение установлено успешно!");
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
Выясним причину частой ошибки "POP3 connection broken in reply". Эта ошибка обычно возникает, если вы пытаетесь подключиться к порту IMAP, используя объект 1С, настроенный на протокол POP3. Убедитесь, что в методе Подключиться вторым параметром явно передан ПротоколИнтернетПочты.IMAP.
Если задача стоит только в отправке уведомлений и вы не хотите возиться с установкой Stunnel на каждый компьютер, проанализируем альтернативный вариант. Можно воспользоваться системным объектом Windows — CDO.Message. Этот объект умеет работать с SSL напрямую, и ему не нужны дополнительные прокладки.
Разберем пример кода для отправки письма через CDO:
loConfig = Новый COMОбъект("CDO.Configuration");
loCdoMessage = Новый COMОбъект("CDO.Message");
loCdoMessage.Configuration = loConfig;
loCdoMessage.From = "ваш_адрес@yandex.ru";
loCdoMessage.To = "кому_отправляем@mail.ru";
loCdoMessage.Subject = "Тема сообщения из 1С";
loCdoMessage.HTMLBody = "Текст сообщения в формате HTML";
// Настройка полей конфигурации
Fields = loConfig.Fields;
// Использовать внешний SMTP сервер
Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
// Адрес сервера
Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.yandex.ru";
// Порт с поддержкой SSL
Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = "465";
// Использовать аутентификацию
Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1;
// Логин и пароль (пароль приложения!)
Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "ваш_логин@yandex.ru";
Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = "ваш_пароль_приложения";
// Включение SSL
Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = 1;
// Таймаут
Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout").Value = 60;
Fields.Update();
Попытка
loCdoMessage.Send();
Сообщить("Письмо успешно отправлено!");
Исключение
Сообщить("Не удалось отправить письмо: " + ОписаниеОшибки());
КонецПопытки;
Этот способ считается более стабильным для простых задач рассылки, так как он не зависит от настроек платформы 1С и наличия сторонних служб в системе.
Рассмотрим критически важные настройки безопасности, без которых ни один из вышеперечисленных методов не заработает:
Посмотрим на ситуацию, когда в компании много рабочих мест с 1С. Совсем не обязательно устанавливать Stunnel на каждый компьютер. Рассмотрим более эффективную схему:
Вы можете установить Stunnel на сервер (например, на сервер 1С или любой выделенный сервер в сети). В конфигурационном файле в параметре accept вместо адреса 127.0.0.1 укажите 0.0.0.0 или конкретный IP-адрес сервера в локальной сети. Например:
accept = 192.168.1.50:143
В этом случае в настройках 1С на всех рабочих станциях в качестве адреса сервера почты нужно будет указать IP-адрес этого сервера (192.168.1.50). Внимание: не забудьте открыть соответствующие порты (143, 25) в Брандмауэре Windows на сервере, чтобы другие машины могли к нему подключиться.
Подводя итог, использование Stunnel — отличный способ «омолодить» механизмы работы с почтой в 1С 8.2, сохранив при этом возможность полноценно работать с IMAP и получать письма. Если же вам требуется только отправка — вариант с CDO будет гораздо проще в реализации и поддержке.