Как настроить почту Яндекс по протоколу IMAP в 1С 8.2 при помощи Stunnel или CDO

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

Работа со старыми версиями платформы 1С (например, 8.2.19) накладывает определенные ограничения при взаимодействии с современными почтовыми сервисами, такими как Яндекс.Основная сложность заключается в том, что старые версии 1С не поддерживают современные протоколы шифрования SSL/TLS, которые сейчас являются обязательными для Яндекса. В этой статье мы подробно разберем, как решить задачу подключения почты по протоколу IMAP и SMTP, используя утилиту Stunnel, а также рассмотрим альтернативный способ отправки через CDO.

Метод 1: Использование Stunnel как локального прокси-сервера

Программа 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.

Метод 2: Использование COM-объекта CDO для отправки почты

Если задача стоит только в отправке уведомлений и вы не хотите возиться с установкой 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. Пароли приложений: Современный Яндекс не позволяет использовать основной пароль аккаунта для входа через почтовые программы. Вам необходимо зайти в Яндекс ID -> Безопасность -> Пароли приложений, создать новый пароль для "Почты" и использовать именно этот 16-значный код в коде 1С или настройках профиля.
  2. Разрешение протоколов: Зайдите в веб-интерфейс Яндекс.Почты, перейдите в "Все настройки" -> "Почтовые программы". Там обязательно должны стоять галочки "С сервера imap.yandex.ru по протоколу IMAP" и "С сервера pop.yandex.ru по протоколу POP3". По умолчанию они могут быть отключены.

Организация работы в локальной сети

Посмотрим на ситуацию, когда в компании много рабочих мест с 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 будет гораздо проще в реализации и поддержке.

← На главную