Как исправить ошибку «SMTP error code 503 valid RCPT command must precede DATA» при отправке почты из 1С?

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

При работе с почтовыми сервисами (особенно часто с Mail.ru) пользователи 1С могут столкнуться с критической ошибкой: «SMTP error code 503 valid RCPT command must precede DATA». Эта проблема парализует отправку счетов, уведомлений и отчетов, возникая даже тогда, когда настройки почтового профиля кажутся абсолютно верными. В данной статье мы подробно разберем, почему возникает этот сбой, как он связан с обновлением платформы 1С и какими способами можно восстановить работоспособность почты.

Анализируем техническую суть ошибки 503

Для начала разберем, что именно сообщает нам почтовый сервер. Протокол SMTP (Simple Mail Transfer Protocol) работает как строгая последовательность команд. Стандартный сеанс выглядит так:

  1. EHLO — приветствие клиента.
  2. AUTH LOGIN — авторизация пользователя.
  3. MAIL FROM — указание адреса отправителя.
  4. RCPT TO — указание адреса получателя (или нескольких).
  5. DATA — команда на передачу текста письма и вложений.

Ошибка 503 означает нарушение этой последовательности. Сервер говорит: «Команда DATA получена слишком рано, ей должна предшествовать валидная команда RCPT». Проще говоря, 1С пытается отправить содержимое письма, не сообщив серверу, кому оно адресовано, либо сервер отклонил всех предложенных получателей, а 1С проигнорировала этот отказ и попыталась продолжить процесс.

Причина №1: Ошибки платформы 1С 8.3.22 и выше

Как показывает практика и обсуждения специалистов, наиболее частой причиной внезапного появления этой ошибки является переход на платформу версии 8.3.22.1704, 8.3.22.1750 и смежные релизы. В этой ветке платформы разработчики 1С существенно обновили библиотеки работы с защищенными соединениями (OpenSSL) и внесли изменения в объект ИнтернетПочта.

Проанализируем ситуацию: на этих релизах объект ИнтернетПочта может некорректно обрабатывать TLS-рукопожатие или таймауты ответов сервера. Если сервер Mail.ru подтверждает получение адреса получателя с микроскопической задержкой, платформа 1С «проскакивает» ожидание ответа и сразу шлет DATA, что и вызывает 503 ошибку.

Способы решения:

  1. Откат платформы: Самым быстрым и эффективным решением на текущий момент является откат на стабильную ветку 8.3.21. Как подтверждают многие системные администраторы, после перехода на 21-ю платформу проблема исчезает мгновенно без изменения кода.
  2. Обновление до актуальных релизов: Фирма 1С признала наличие проблем в 8.3.22, поэтому рекомендуется обновиться до последних сборок 8.3.23 или 8.3.24, где работа с TLS была стабилизирована.

Причина №2: Некорректные адреса получателей

Если ваша платформа стабильна, но ошибка возникла внезапно, нам необходимо проверить данные, которые менеджеры вносят в систему. Сервер SMTP выдает 503, если команда RCPT TO была отправлена, но сервер её отклонил из-за синтаксической ошибки в адресе.

Рассмотрим типичные примеры «косячных» адресов:

Разберем, как это реализовано в типовых конфигурациях (например, ERP 2.5). В модуле РаботаСПочтовымиСообщениямиСлужебный существует процедура ОтправитьПисьма(). Если один из адресатов некорректен, сервер отклоняет его, и если логика программы не прерывает отправку, следующая команда DATA вызывает фатальную ошибку 503.

Причина №3: Настройки безопасности и сертификаты

Иногда проблема кроется в проверке сертификатов почтовых серверов. Рассмотрим, как можно принудительно заставить 1С игнорировать ошибки проверки сертификатов, что часто помогает при работе через прокси-серверы или антивирусы (например, Kaspersky), которые подменяют SSL-трафик.

Для этого в файле конфигурации conf.cfg (который обычно находится в папке с установленной платформой C:\Program Files\1cv8\conf) можно прописать следующие параметры:


SystemLanguage=RU
IgnoreInternetMailServerCertificateVerificationList=imap.gmail.com;smtp.gmail.com;imap.mail.ru;smtp.mail.ru

Это позволит платформе игнорировать цепочки сертификатов для указанных серверов и более стабильно устанавливать соединение.

Использование паролей приложений (Mail.ru)

Не забываем про базовую настройку для Mail.ru. С 2022 года почтовые сервисы запретили использование основного пароля от ящика во внешних программах. Проверим, выполнены ли у вас следующие шаги:

  1. Зайдите в настройки безопасности почтового ящика на сайте.
  2. Выберите раздел «Пароли для внешних приложений».
  3. Сгенерируйте уникальный 16-значный код.
  4. Именно этот код (без пробелов) необходимо вставить в поле «Пароль» в настройках почтового профиля в 1С.

Альтернативный программный метод отправки (CDO)

Если обновить платформу невозможно, а встроенный объект ИнтернетПочта продолжает давать сбои, рассмотрим вариант использования системной библиотеки Windows CDO (Collaboration Data Objects). Этот метод работает в обход механизмов 1С, используя стандартные компоненты ОС.

Пример кода для реализации отправки через CDO:


// Создание объекта сообщения
Почта = Новый COMОбъект("CDO.Message");
Конфигурация = Новый COMОбъект("CDO.Configuration");

// Настройка полей SMTP
Поля = Конфигурация.Fields;
Поля.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2; // SMTP
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.mail.ru";
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 465;
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1; // Basic
Поля.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "your_login@mail.ru";
Поля.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = "app_password";
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = Истина;
Поля.Update();

Почта.Configuration = Конфигурация;
Почта.From = "your_login@mail.ru";
Почта.To = "recipient@example.com";
Почта.Subject = "Тестовое письмо";
Почта.TextBody = "Текст сообщения";

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

Заключение и выводы

Подведем итог. Ошибка 503 valid RCPT command must precede DATA в 90% случаев при работе с 1С обусловлена либо багом конкретного релиза платформы (8.3.22), либо грязными данными в адресах получателей.

Проанализируем ваши действия по шагам при возникновении проблемы:

  1. Проверьте версию платформы. Если это 8.3.22.1704 или выше (но ниже 8.3.23) — попробуйте откатиться на 8.3.21.
  2. Проверьте адрес получателя в конкретном письме, на котором произошел затык. Ищите лишние пробелы, неправильные домены и отсутствие разделителей.
  3. Убедитесь, что используется «Пароль для приложений», а не основной пароль от почты.
  4. Если ничего не помогает, рассмотрите возможность установки локального SMTP-релея (например, hMailServer), который будет принимать почту от 1С без шифрования и сам отправлять её на Mail.ru.

Соблюдение этих рекомендаций позволит вам быстро восстановить работу почтовой службы и избежать простоев в бизнес-процессах.

← На главную