Как исправить ошибку «SMTP error code 553 5.7.1 Sender address rejected» при отправке почты из 1С?

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

При разработке механизмов рассылки уведомлений или отправки отчетов по электронной почте из 1С программисты часто сталкиваются с ошибкой: «Ошибка при вызове метода контекста (Послать): Указано недопустимое имя почтового ящика (SMTP error code 553 5.7.1 Sender address rejected: not owned by auth user)». Эта проблема особенно актуальна при работе с крупными почтовыми сервисами, такими как Яндекс, Mail.ru или Gmail. Давайте разберем причины возникновения этой ситуации и найдем комплексное решение задачи.

Разберем причину ошибки

Технически ошибка 553 5.7.1 означает, что почтовый сервер принял ваши учетные данные (логин и пароль), но заблокировал отправку письма, так как адрес, указанный в поле «Отправитель» (From), не совпадает с тем адресом, под которым вы авторизовались в системе. Современные почтовые серверы делают это для борьбы со спамом и подменой обратных адресов. Проанализируем типичный код, который приводит к такой ошибке:


&НаКлиенте
Процедура ПроверитьПочту(Команда)
    Профиль = Новый ИнтернетПочтовыйПрофиль;
    Профиль.АдресСервераSMTP = "smtp.yandex.ru";
    Профиль.ИспользоватьSSLSMTP = Истина;
    Профиль.ПортSMTP = 465;
    Профиль.ПользовательSMTP = "my_email@yandex.ru";
    Профиль.ПарольSMTP = "my_password";
    
    Сообщение = Новый ИнтернетПочтовоеСообщение;
    Сообщение.Тема = "Тестовое письмо";
    Сообщение.Получатели.Добавить("recipient@mail.ru");
    
    Почта = Новый ИнтернетПочта;
    Попытка
        Почта.Подключиться(Профиль);
        Почта.Послать(Сообщение);
        Сообщить("Письмо отправлено");
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

В данном примере мы создаем объект ИнтернетПочтовоеСообщение, но не заполняем свойство Отправитель. В результате 1С формирует заголовок письма с пустым или некорректным полем отправителя, что и вызывает отказ сервера Яндекса.

Шаг 1. Настройка объекта ИнтернетПочтовоеСообщение

Первое и самое важное действие — это явно указать адрес отправителя в самом сообщении. Выясним, как это сделать правильно. Мы должны убедиться, что адрес в Сообщение.Отправитель.Адрес в точности совпадает с Профиль.ПользовательSMTP.


// Создаем объект сообщения
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Тема = "Проверка связи из 1С";

// Указываем отправителя - ОБЯЗАТЕЛЬНО для Yandex и Mail.ru
Сообщение.Отправитель.Адрес = "my_email@yandex.ru";
Сообщение.Отправитель.ОтображаемоеИмя = "Робот 1С:Бухгалтерия";

// Добавляем получателя
Сообщение.Получатели.Добавить("recipient@mail.ru");

Проанализируем ситуацию: если вы используете корпоративную почту на базе Яндекса, убедитесь, что вы указываете полный адрес (вместе с доменом), а не просто короткий логин.

Шаг 2. Использование «Паролей приложений»

Рассмотрим современный стандарт безопасности. Почтовые сервисы больше не позволяют использовать ваш основной пароль от почты для доступа через SMTP/IMAP. Если вы вставите обычный пароль в Профиль.ПарольSMTP, вы можете получить ошибку авторизации или ту же 553, так как сервер сочтет подключение небезопасным.

Что нужно сделать в интерфейсе почты:

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

Шаг 3. Полная настройка ИнтернетПочтовыйПрофиль

Посмотрим на пример правильного заполнения профиля с учетом всех рекомендаций форума. Некоторые почтовые серверы требуют авторизации не только по SMTP, но и предварительной проверки по POP3/IMAP («POP before SMTP»), хотя для современных серверов Яндекса это редкость, иногда это помогает стабилизировать соединение.


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

// Настройки отправки (SMTP)
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465;
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ПользовательSMTP = "my_email@yandex.ru";
Профиль.ПарольSMTP = "ваш_пароль_приложения";
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;

// Настройки получения (опционально, но иногда требуется для инициализации сессии)
Профиль.АдресСервераPOP3 = "pop.yandex.ru";
Профиль.ПортPOP3 = 995;
Профиль.ИспользоватьSSLPOP3 = Истина;
Профиль.Пользователь = "my_email@yandex.ru";
Профиль.Пароль = "ваш_пароль_приложения";

Профиль.ВремяОжидания = 30;

Шаг 4. Настройки в веб-интерфейсе почты

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

  1. Откройте «Почта» -> «Все настройки» -> «Почтовые программы».
  2. Убедитесь, что установлена галочка «Разрешить доступ к почтовому ящику с помощью почтовых клиентов».
  3. Выберите протоколы (рекомендуется IMAP, но для простой отправки достаточно SMTP).

Шаг 5. Особенности работы с SSL и портами

Рассмотрим нюансы платформы 1С:Предприятие 8.3. Для порта 465 всегда нужно устанавливать ИспользоватьSSLSMTP = Истина. Однако в некоторых сетях порт 465 блокируется провайдерами или системными администраторами. В таком случае попробуйте альтернативный вариант:

Этот метод инициализирует защищенное соединение через STARTTLS, что часто помогает избежать проблем с сетевыми экранами.

Итоговый стабильный код для отправки

Соберем все наши знания в единый рабочий алгоритм:


&НаСервере
Процедура ОтправитьПисьмоНаСервере()
    
    Профиль = Новый ИнтернетПочтовыйПрофиль;
    Профиль.АдресСервераSMTP = "smtp.yandex.ru";
    Профиль.ПортSMTP = 465;
    Профиль.ИспользоватьSSLSMTP = Истина;
    Профиль.ПользовательSMTP = "info@my-company.ru"; // Ваш логин
    Профиль.ПарольSMTP = "abcd-efgh-ijkl-mnop";   // ПАРОЛЬ ПРИЛОЖЕНИЯ
    Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
    
    Сообщение = Новый ИнтернетПочтовоеСообщение;
    Сообщение.Тема = "Отчет за " + Формат(ТекущаяДата(), "ДЛФ=D");
    
    // КЛЮЧЕВОЙ МОМЕНТ:
    Сообщение.Отправитель.Адрес = "info@my-company.ru"; 
    Сообщение.Отправитель.ОтображаемоеИмя = "Информационная система 1С";
    
    Сообщение.Получатели.Добавить("director@my-company.ru");
    
    // Добавление вложения, если файл существует
    ПутьКФайлу = "C:\Reports\Report.pdf";
    ФайлНаДиске = Новый Файл(ПутьКФайлу);
    Если ФайлНаДиске.Существует() Тогда
        Сообщение.Вложения.Добавить(ПутьКФайлу, "DailyReport.pdf");
    КонецЕсли;
    
    Почта = Новый ИнтернетПочта;
    
    Попытка
        Почта.Подключиться(Профиль);
        Почта.Послать(Сообщение);
        Почта.Отключиться();
        Сообщить("Сообщение успешно отправлено!");
    Исключение
        ТекстОшибки = ОписаниеОшибки();
        // Записываем ошибку в журнал регистрации для анализа
        ЗаписьЖурналаРегистрации("ОтправкаПочты", УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки);
        Сообщить("Ошибка при отправке: " + ТекстОшибки);
    КонецПопытки;
    
КонецПроцедуры

Важное замечание: Если ваша база работает в клиент-серверном варианте, крайне рекомендуется выполнять этот код &НаСервере. Это позволит избежать проблем с настройками прав доступа к портам на клиентских машинах и исключит влияние локальных антивирусов, которые могут блокировать почтовый трафик.

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

← На главную