При реализации механизмов почтовых оповещений в 1С разработчики часто сталкиваются с ошибками почтовых серверов: «SMTP error code 550 5.7.1 Authentication Required» или «SMTP error code 553 5.1.8 Sender address rejected as spoofed». Разберем детально, почему возникают эти ошибки, как правильно настроить параметры аутентификации в объекте ИнтернетПочтовыйПрофиль и как организовать корректную отправку сообщений от имени различных исполнителей без нарушения политик безопасности почтового сервера.
Проанализируем природу каждой из возникающих ошибок:
Отправитель почтового сообщения отличается от почтового ящика пользователя, под которым выполнено подключение (ПользовательSMTP). Почтовый сервер расценивает такую попытку как спуфинг (подделку адреса отправителя) и блокирует отправку в целях противодействия спаму.Рассмотрим пример кода, в котором возникает ошибка подделки адреса отправителя:
ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль.АдресСервераSMTP = "smtp.company.ru";
ПочтовыйПрофиль.ПортSMTP = 25;
ПочтовыйПрофиль.ПользовательSMTP = "robot@company.ru";
ПочтовыйПрофиль.ПарольSMTP = "RobotPassword";
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(ПочтовыйПрофиль);
Исключение
Сообщить("Ошибка подключения к почтовому серверу: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
ПочтовоеСообщение.Тема = "Задача № " + Объект.Номер + " выполнена";
ПочтовоеСообщение.Тексты.Добавить(Объект.Описание);
ПочтовоеСообщение.Получатели.Добавить(АдресАвтора);
// Ошибочный момент: подмена адреса отправителя
Если ЗначениеЗаполнено(АдресИсполнителя) Тогда
ПочтовоеСообщение.Отправитель = СокрЛП(АдресИсполнителя);
КонецЕсли;
Почта.Послать(ПочтовоеСообщение);
В приведенном коде подключение выполняется под учетной записью robot@company.ru, а в качестве Отправитель устанавливается произвольный АдресИсполнителя. Если у системного ящика на сервере нет прав отправки от имени других пользователей («Send As» / «Send on Behalf of»), сервер возвращает ошибку 553.
Чтобы письмо успешно проходило антиспам-проверки сервера, а получатель мог ответить конкретному исполнителю задачи, используем следующий подход:
Отправитель всегда устанавливаем адрес учетной записи, под которой выполняется авторизация на SMTP-сервере.ИмяОтправителя записываем понятное текстовое представление (например, ФИО исполнителя или название отдела).ОбратныйАдрес (заголовок Reply-To). При нажатии кнопки «Ответить» в почтовом клиенте получателя письмо автоматически отправится исполнителю.АутентификацияSMTP.Посмотрим на исправленный и дополненный пример кода:
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль.АдресСервераSMTP = "smtp.company.ru";
ПочтовыйПрофиль.ПортSMTP = 587;
ПочтовыйПрофиль.ПользовательSMTP = "robot@company.ru";
ПочтовыйПрофиль.ПарольSMTP = "RobotPassword";
ПочтовыйПрофиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
ПочтовыйПрофиль.Таймаут = 30;
ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
ПочтовоеСообщение.Тема = "Задача № " + Объект.Номер + " выполнена";
ПочтовоеСообщение.Тексты.Добавить("Описание задачи: " + Объект.Описание);
ПочтовоеСообщение.Получатели.Добавить(СокрЛП(АдресАвтора));
// Указываем адрес авторизованной учетной записи
ПочтовоеСообщение.Отправитель = "robot@company.ru";
// Задаем читаемое имя отправителя
ПочтовоеСообщение.ИмяОтправителя = СокрЛП(Объект.Автор);
// Направляем ответы на адрес исполнителя
Если ЗначениеЗаполнено(АдресИсполнителя) Тогда
ПочтовоеСообщение.ОбратныйАдрес.Добавить(СокрЛП(АдресИсполнителя));
КонецЕсли;
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(ПочтовыйПрофиль);
Почта.Послать(ПочтовоеСообщение);
Почта.Отключиться();
Исключение
Почта.Отключиться();
ВызватьИсключение "Не удалось отправить почтовое сообщение: " + ОписаниеОшибки();
КонецПопытки;
Если бизнес-процесс требует, чтобы письмо уходило строго от имени конкретного сотрудника (в поле Отправитель должен стоять его личный ящик), необходимо выполнять аутентификацию под реквизитами именно этого пользователя. Разберем алгоритм реализации:
ПочтовыйПрофиль.ПользовательSMTP и ПочтовыйПрофиль.ПарольSMTP данными текущего исполнителя.ПочтовоеСообщение.Отправитель равным логину подключенной учетной записи.При настройке отправки писем обратите внимание на следующие нюансы:
ПочтовыйПрофиль.ИспользоватьSSLSMTP = Истина, а также использовать пароли внешних приложений вместо основных паролей от учетных записей.Почта.Отключиться() в блоке обработки исключений или после успешной отправки, чтобы не блокировать сеансы на почтовом сервере.