При программной отправке электронных писем из 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 error code 501 (Syntax error in parameters or arguments). Чаще всего сбой происходит по следующим причинам:
ИнтернетПочтовыйПрофиль, отправка по SMTP блокируется защитным механизмом почтового сервера с кодом 501 или 503.ИспользоватьSSLSMTP = Истина, текстовые команды отправляются в незашифрованном виде, что сервер воспринимает как синтаксический мусор или разрыв протокола.HELO. Имя ПК должно содержать только латиницу, цифры и дефис.Отправитель почтового сообщения, обязан в точности совпадать со значением свойства ПользовательSMTP.<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 необходимо вставлять специально сгенерированный пароль для внешних приложений, созданный в настройках безопасности вашего почтового ящика.
Если разработка ведется в типовой конфигурации на базе Библиотеки стандартных подсистем, вместо прямого создания объектов ИнтернетПочтовыйПрофиль и ИнтернетПочта рекомендуется использовать методы общего модуля РаботаСПочтовымиСообщениями. Это избавит от необходимости вручную настраивать порты, протоколы шифрования и экранировать заголовки писем.