Как программно настроить аутентификацию SMTP аналогично серверу входящей почты и устранить ошибку 501 в 1С?

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

При программной отправке электронных писем из 1С разработчики часто сталкиваются с ситуацией, когда интерактивно через пользовательский интерфейс почта отправляется без проблем, а при вызове метода Послать() объекта ИнтернетПочта возникает исключение: «Неверный синтаксис команды. Возможно ошибка в написании почтового адреса (SMTP error code 501)». Выясним причину этой ошибки и разберем, как правильно заполнить параметры почтового профиля.

Как реализовать признак «Аналогично серверу входящей почты» в коде

В пользовательском интерфейсе большинства типовых конфигураций 1С присутствует удобный флажок «SMTP-серверу требуется проверка подлинности аналогично серверу входящей почты». Однако, если мы откроем синтакс-помощник и изучим свойства объекта ИнтернетПочтовыйПрофиль, отдельного свойства-флажка с таким названием мы не найдем.

Проанализируем механику работы почтового профиля. Чтобы сервер исходящей почты (SMTP) авторизовал сессию теми же учетными данными, что и входящая почта, необходимо явно скопировать логин и пароль в соответствующие SMTP-свойства профиля:


Профиль = Новый ИнтернетПочтовыйПрофиль;

// Параметры входящей почты (IMAP или POP3)
Профиль.АдресСервераIMAP = "imap.yandex.ru";
Профиль.ПортIMAP         = 993;
Профиль.Пользователь     = "user@domain.ru";
Профиль.Пароль           = "app_password";
Профиль.ИспользоватьSSLIMAP = Истина;

// Настройка SMTP "аналогично серверу входящей почты"
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP         = 465;
Профиль.ПользовательSMTP = Профиль.Пользователь;
Профиль.ПарольSMTP       = Профиль.Пароль;

// Указываем способ аутентификации
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
Профиль.ИспользоватьSSLSMTP = Истина;

Если оставить свойства ПользовательSMTP и ПарольSMTP пустыми, платформа попытается выполнить отправку анонимно, что немедленно пресекается современными почтовыми серверами.

Почему при отправке почты возникает ошибка SMTP 501

Рассмотрим подробнее природу ошибки SMTP error code 501 (Syntax error in parameters or arguments). Чаще всего сбой происходит по следующим причинам:

  1. Механизм POP/IMAP-before-SMTP: Некоторые почтовые службы и корпоративные шлюзы требуют предварительной авторизации на сервере входящей почты перед отправкой писем. Если параметры сервера IMAP/POP3 не были заполнены в объекте ИнтернетПочтовыйПрофиль, отправка по SMTP блокируется защитным механизмом почтового сервера с кодом 501 или 503.
  2. Отсутствие SSL-шифрования: Если для защищенного порта (например, 465) не включено свойство ИспользоватьSSLSMTP = Истина, текстовые команды отправляются в незашифрованном виде, что сервер воспринимает как синтаксический мусор или разрыв протокола.
  3. Сетевое имя компьютера (команда HELO/EHLO): При инициализации соединения платформа 1С отправляет сетевое имя компьютера серверу. Если имя ПК в операционной системе содержит кириллицу, знаки подчеркивания или спецсимволы, сервер отклоняет сессию из-за недопустимого синтаксиса команды HELO. Имя ПК должно содержать только латиницу, цифры и дефис.
  4. Несовпадение адреса отправителя с логином: Современные почтовые сервисы (Яндекс, Mail.ru, Google) запрещают спуфинг. Адрес, переданный в свойстве Отправитель почтового сообщения, обязан в точности совпадать со значением свойства ПользовательSMTP.
  5. Некорректно указанный адрес получателя: Добавление адреса вручную со скобками вида <mail@domain.com> приводит к тому, что 1С формирует команду RCPT TO: <<mail@domain.com>>, вызывая 501-ю ошибку. Адрес должен передаваться без скобок, а пробелы по краям следует удалять с помощью функции СокрЛП().

Пошаговый пример корректной отправки письма

Соберем рабочий пример отправки сообщения, в котором учтены все рассмотренные нюансы:


// 1. Создаем и заполняем профиль подключения
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP         = 465;
Профиль.ИспользоватьSSLSMTP = Истина;

Профиль.АдресСервераIMAP = "imap.mail.ru";
Профиль.ПортIMAP         = 993;
Профиль.ИспользоватьSSLIMAP = Истина;

Профиль.Пользователь     = "sender@mail.ru";
Профиль.Пароль           = "пароль_для_внешних_приложений";

// Дублируем параметры для SMTP
Профиль.ПользовательSMTP = Профиль.Пользователь;
Профиль.ПарольSMTP       = Профиль.Пароль;
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;

// 2. Формируем почтовое сообщение
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Отправитель.Адрес = Профиль.ПользовательSMTP;
Письмо.Отправитель.ОтображаемоеИмя = "Уведомления 1С";

// Очищаем адрес от невидимых символов и пробелов
ЧистыйАдрес = СокрЛП("recipient@domain.com");
Письмо.Получатели.Добавить(ЧистыйАдрес);

Письмо.Тема = "Тестовое сообщение из 1С";
Письмо.Тексты.Добавить("Сообщение успешно отправлено!", ТипТекстаПочтовогоСообщения.ПростойТекст);

// 3. Выполняем отправку
Почта = Новый ИнтернетПочта;
Попытка
    Почта.Подключиться(Профиль);
    Почта.Послать(Письмо);
    Почта.Отключиться();
    Сообщить("Письмо успешно отправлено!");
Исключение
    Почта.Отключиться();
    ВызватьИсключение "Ошибка отправки почты: " + ОписаниеОшибки();
КонецПопытки;

Использование паролей приложений

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

Рекомендация для конфигураций на БСП

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

← На главную