При работе в конфигурации 1С:Управление торговлей 10.3 (УТ 10.3) программисты часто сталкиваются с проблемой при отправке электронных писем. Ошибка 5.7.0 Почтовый ящик не доступен или Authentication failed может возникнуть даже в тех случаях, когда тестовое соединение проходит успешно, а в настройках используется корректный пароль приложения. В данной статье мы подробно разберем причины возникновения этой ошибки, проанализируем программный код и предложим варианты решения задачи.
Для начала рассмотрим типовой код реализации отправки сообщения через объект ИнтернетПочта. Часто ошибка кроется в неправильной инициализации параметров профиля. Разберем пример кода, который часто используется в подобных задачах:
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПользовательSMTP = Результат.Почта; // Логин от почтового ящика
Профиль.ПарольSMTP = Пароль; // Пароль приложения, сгенерированный в Яндексе
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ПортSMTP = 465;
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
Письмо = Новый ИнтернетПочтовоеСообщение;
Текст = Письмо.Тексты.Добавить(Объект.ТекстПисьма);
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
Письмо.Тема = "Тестовое письмо из 1С";
Письмо.Отправитель = Почта; // Здесь должен быть адрес, совпадающий с логином
Письмо.ИмяОтправителя = ПараметрыСеанса.ТекущийПользователь.Наименование;
Письмо.Получатели.Добавить(Строка.Значение.Почта);
ПочтаОбъект = Новый ИнтернетПочта;
Попытка
ПочтаОбъект.Подключиться(Профиль);
ПочтаОбъект.Послать(Письмо);
ПочтаОбъект.Отключиться();
Исключение
Сообщить("Не удалось отправить письмо: " + ОписаниеОшибки());
КонецПопытки;
Проанализируем этот код. Важно понимать, что метод Подключиться может пройти успешно, так как он проверяет только возможность установления связи с сервером. Ошибка же возникает непосредственно при вызове метода Послать, когда сервер SMTP проводит финальную валидацию отправителя и его прав.
Одной из самых банальных, но труднозаметных причин ошибки 5.7.0 является наличие пробелов в строковых переменных. Выясним причину: если в справочнике учетных записей или в переменной, хранящей адрес почты, в конце строки закрался пробел (например, "info@yandex.ru " вместо "info@yandex.ru"), авторизация может пройти, но сервер отклонит команду MAIL FROM, так как адрес не будет соответствовать авторизованному пользователю. Рекомендуется всегда использовать функцию СокрЛП() при получении данных из базы.
Яндекс крайне строго следит за тем, чтобы адрес, указанный в свойстве Письмо.Отправитель, полностью совпадал с логином, указанным в Профиль.ПользовательSMTP. Рассмотрим ситуацию: если вы авторизуетесь под пользователем manager@yandex.ru, а в письме пытаетесь указать отправителя info@yandex.ru, сервер вернет ошибку 5.7.0 или 5.5.0. Это защита от подмены адреса (Email Spoofing).
Также проверьте свойство Сообщение.Отправитель.Адрес. В некоторых случаях сервер требует, чтобы это поле было заполнено корректно и без дополнительных имен в кавычках.
Даже при использовании верного кода, внешние факторы могут блокировать отправку. Разберем по шагам, что нужно проверить в веб-интерфейсе почты:
Конфигурация УТ 10.3 часто эксплуатируется на устаревших версиях платформы 1С. Посмотрим на ситуацию с технической стороны: современные почтовые серверы требуют протокол шифрования TLS 1.2. Если ваша платформа ниже версии 8.3.10, встроенный объект ИнтернетПочта может не поддерживать этот протокол корректно. В таком случае соединение будет сбрасываться с ошибкой SMTP.
Решением в данной ситуации может быть использование объекта CDO.Message или внешних библиотек, которые работают через системные вызовы Windows, поддерживающие актуальные протоколы шифрования.
Проанализируем работу сетевых экранов. Ошибка "Почтовый ящик не доступен" часто возникает, когда антивирус (например, Kaspersky) пытается проверить защищенное SSL-соединение. Он подменяет сертификат сервера своим собственным, 1С не опознает этот сертификат и обрывает сессию. Для устранения этой проблемы попробуйте временно отключить проверку защищенных соединений или добавьте адрес smtp.yandex.ru в исключения антивируса.
Вместо того чтобы писать код "с нуля", в УТ 10.3 можно воспользоваться встроенной процедурой из общего модуля УправлениеЭлектроннойПочтой. Это более надежный способ, так как в типовом решении уже учтены многие нюансы. Рассмотрим пример:
СтруктураНовогоПисьма = Новый Структура;
СписокКому = Новый СписокЗначений;
СписокКому.Добавить(АдресПолучателя, Строка(Контрагент));
СтруктураНовогоПисьма.Вставить("Кому", СписокКому);
СтруктураНовогоПисьма.Вставить("УчетнаяЗапись", УчетнаяЗаписьПочты); // Ссылка на справочник УчетныеЗаписиЭлектроннойПочты
СтруктураНовогоПисьма.Вставить("Тело", ТекстПисьма);
СтруктураНовогоПисьма.Вставить("ВидТекста", Перечисления.ВидыТекстовЭлектронныхПисем.Текст);
СтруктураНовогоПисьма.Вставить("Тема", "Напоминание о задолженности");
НовоеПисьмо = УправлениеЭлектроннойПочтой.НаписатьПисьмо(ПараметрыСеанса.ТекущийПользователь, СтруктураНовогоПисьма,,,,,,,Ложь);
НовоеПисьмо.Письмо.СтатусПисьма = Перечисления.СтатусыПисем.Исходящее;
НовоеПисьмо.Письмо.Записать();
Использование типового функционала позволяет избежать ошибок ручного заполнения объекта ИнтернетПочтовыйПрофиль и гарантирует, что письмо будет корректно зарегистрировано в системе.
Если вы столкнулись с ошибкой 5.7.0, рекомендуем придерживаться следующего алгоритма:
ИспользоватьSSLSMTP = Истина.Письмо.Отправитель в точности совпадает с Профиль.ПользовательSMTP.Соблюдение этих правил позволит настроить стабильную отправку документов из 1С:УТ 10.3 своим контрагентам.