Как настроить отправку почты из 1С:УПП и исправить ошибку SMTP 530 (сервер требует аутентификации)?

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

Настройка электронной почты в устаревших конфигурациях, таких как 1С:Управление производственным предприятием (УПП), часто превращается в серьезную техническую задачу. Основная сложность заключается в том, что современные почтовые сервисы (Gmail, Mail.ru, Yandex, MS Exchange) перешли на строгие протоколы безопасности, в то время как механизмы платформы 1С версии 8.2 и ранних 8.3 имели ограниченную поддержку шифрования. Разберем подробно, почему возникает ошибка SMTP error code 530 и как правильно настроить отправку писем, используя различные методы.

Анализ ошибки SMTP 530 и причин ее возникновения

Ошибка с кодом 530 буквально означает, что сервер требует аутентификации, но не получил ее в должном виде перед попыткой отправки сообщения. Рассмотрим ситуацию: вы заходите в системную учетную запись, ставите флаг "Требуется SMTP аутентификация", и проверка проходит успешно. Однако при реальной отправке, например, печатной формы счета, система выдает ошибку. Проанализируем, почему это происходит:

  1. Различие в контекстах выполнения: Проверка настроек в форме учетной записи может выполняться на стороне клиента, а реальная отправка через ОбщийМодуль.УправлениеЭлектроннойПочтой — на стороне сервера. Если на сервере 1С закрыты порты или не настроен доступ в интернет, аутентификация не пройдет.
  2. Требования к шифрованию: Современные серверы не принимают логин и пароль в открытом виде. Если вы используете порт 25 или 587 без явного указания SSL или STARTTLS, сервер сбросит соединение с кодом 530.
  3. Методы авторизации: Почтовые серверы поддерживают разные способы подтверждения личности (Cram-MD5, Login, Plain). Если платформа 1С пытается использовать метод, который запрещен на сервере, возникнет ошибка.

Настройка защищенного соединения SSL/TLS в 1С 8.3

Если вы используете платформу версии 8.3.5 и выше, у вас появляется возможность полноценно управлять защищенным соединением. Проблема большинства старых конфигураций в том, что в коде их общих модулей не всегда учитываются новые свойства объекта ИнтернетПочтовыйПрофиль. Посмотрим на пример кода, который необходимо внедрить или проверить в процедуре формирования профиля:


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru"; // или ваш сервер
Профиль.ПортSMTP = 465; // стандартный порт для SSL
Профиль.ПользовательSMTP = "user@mail.ru";
Профиль.ПарольSMTP = "ваш_пароль_приложения";

// Ключевые настройки для современных серверов
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Истина;
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;

Обратите внимание на свойство ПарольSMTP. Рассмотрим важный нюанс: современные публичные сервисы (Yandex, Mail.ru, Gmail) требуют создания "Пароля приложения". Обычный пароль от почтового ящика в 1С работать не будет — сервер будет выдавать ошибку авторизации 535 или 530. Вам необходимо зайти в настройки безопасности почты через браузер и сгенерировать специальный код для 1С.

Различия между портами 465 и 587 (Implicit vs Explicit SSL)

Часто программисты сталкиваются с ошибкой Invalid token, probably not an SSL server при попытке включить шифрование. Проанализируем ситуацию: эта ошибка обычно возникает, когда 1С пытается начать зашифрованный сеанс (Implicit SSL) на порту, который ожидает обычное соединение с последующим переходом в защищенный режим (STARTTLS).

Альтернативный метод отправки через CDO (для MS Windows)

Если штатные средства ИнтернетПочта в УПП продолжают выдавать ошибки, или если ваш почтовый сервер (например, локальный Microsoft Exchange) требует специфических настроек аутентификации NTLM, можно использовать объект CDO.Message. Этот метод использует системные библиотеки Windows, которые зачастую лучше справляются с сертификатами и шифрованием. Рассмотрим пример реализации:


Письмо = Новый COMОбъект("CDO.Message");
Письмо.To = "recipient@example.com";
Письмо.From = "sender@example.com";
Письмо.Subject = "Тестовое письмо из 1С";
Письмо.TextBody = "Текст сообщения";

// Настройка параметров подключения
Конфигурация = Письмо.Configuration.Fields;
// Использование внешнего SMTP сервера
Конфигурация.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
Конфигурация.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.yourserver.ru";
Конфигурация.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 465;
// Включение SSL
Конфигурация.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = Истина;
// Тип авторизации: 1 - Basic (логин/пароль)
Конфигурация.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1;
Конфигурация.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "login";
Конфигурация.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = "password";

Конфигурация.Update();

Попытка
    Письмо.Send();
    Сообщить("Письмо успешно отправлено!");
Исключение
    Сообщить("Ошибка отправки через CDO: " + ОписаниеОшибки());
КонецПопытки;

Этот способ является отличным "костылем", если обновить платформу 1С нет возможности, а почтовый сервер требует современных методов защиты. Однако помните, что этот код будет работать только на сервере под управлением Windows. Также при работе в терминальном режиме можно использовать решение для отправки писем через локальный почтовый клиент.

Решение для старых платформ (8.2) через stunnel

Если вы вынуждены работать на платформе версии 8.2, которая физически не поддерживает свойство ИспользоватьSSLSMTP, единственным стабильным решением будет использование утилиты stunnel. Выясним принцип работы: stunnel — это локальный прокси-сервер, который ставится на ту же машину, где работает сервер 1С.

Вы настраиваете 1С на отправку почты на localhost (127.0.0.1) по обычному порту 25 без всякого шифрования. Программа stunnel "слушает" этот порт, подхватывает письмо, упаковывает его в SSL/TLS туннель и передает на реальный сервер (например, smtp.gmail.com) по порту 465. Для 1С это выглядит как простейшая отправка, а почтовый сервер получает корректно зашифрованные данные.

Проверка настроек MS Exchange

В случае работы с корпоративным сервером Exchange, ошибка 530 часто связана не с кодом 1С, а с настройками Receive Connectors (Коннекторов получения). Проанализируем действия системного администратора:

  1. Необходимо убедиться, что коннектор, принимающий почту от 1С, разрешает Basic Authentication.
  2. Проверьте права учетной записи: в Exchange часто запрещена отправка писем ("Send As"), если адрес отправителя (поле From) не совпадает с логином, под которым 1С авторизовалась на сервере.
  3. Если сервер 1С находится внутри сети, можно добавить его IP в список разрешенных для анонимной отправки, но это снижает безопасность.

Резюмируя, при возникновении ошибки 530 в УПП, пройдите по шагам: проверьте версию платформы (нужна 8.3.5+), убедитесь в наличии пароля приложения, попробуйте сменить порт на 465 с включенным SSL, а в случае неудачи — переходите на использование объекта CDO.Message. В качестве готовой альтернативы можно использовать обработку для отправки документов по почте из УПП.

← На главную