Как отправить письма из 1С через свой SMTP-сервер Gmail или Mimecast, учитывая двухфакторную аутентификацию и политики безопасности?

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

При автоматизированной отправке электронных писем из системы 1С через внешние SMTP-серверы, такие как Gmail или корпоративный Mimecast, пользователи часто сталкиваются с проблемами аутентификации и блокировками по политике безопасности. Рассмотрим подробно, как решить эти сложности и настроить надежную отправку корреспонденции.

Наш сценарий включает отправку писем с почтового аккаунта vasya.D@domen.com. При этом сам почтовый ящик находится на Gmail, а также имеется собственный SMTP-сервер smtp_inbound.mimecast.com. Важным нюансом является то, что авторизация на Gmail происходит через учетную запись vasya.D@domen.com, и для этой учетной записи включена двухфакторная аутентификация (2FA).

Анализ исходной проблемы и ошибок

Изначально разработчик столкнулся со следующими проблемами при попытке отправить письма из 1С:

  1. При подключении к SMTP Gmail (smtp.gmail.com):

    Возникала ошибка Произошла ошибка при работе с SMTP. Код ошибки: 27, а также при других конфигурациях ошибка аутентификации: Аутентификация не прошла (SMTP error code 535 5.7.8 Username and Password not accepted. Learn more at https://support.google.com/mail/?p=BadCredentials). Эта ошибка указывает на то, что предоставленные логин и пароль были отклонены сервером Gmail.

    Пример кода, используемый для попытки подключения к Gmail:

    
    Профиль = Новый ИнтернетПочтовыйПрофиль;
    Профиль.АдресСервераSMTP = "smtp.gmail.com";
    Профиль.ПользовательSMTP = ОтправительПольз; // vasya.D@domen.com
    Профиль.ПарольSMTP = ПарольПользGMAIL; // VasyaK$1
    Профиль.ИспользоватьSSLSMTP = Истина;
    Профиль.ПортSMTP = 465;
    Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
    Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Истина;
    
  2. При подключении к собственному SMTP-серверу Mimecast (smtp_inbound.mimecast.com):

    Подключение проходило успешно, но при отправке писем возникали ошибки:

    • Почтовый ящик не доступен (SMTP error code 550 Submitter failed to authenticate) при использовании ПортSMTP = 587. Эта ошибка говорит о том, что отправитель не смог успешно аутентифицироваться.
    • Почтовый ящик не доступен (SMTP error code 550 Anti-Spoofing policy - Inbound not allowed) при использовании ПортSMTP = 25. Данная ошибка указывает на срабатывание политики антиспуфинга Mimecast, которая запрещает отправку писем от имени вашего домена, если они кажутся подозрительными или исходят из неавторизованного источника.

    Эти ошибки явно указывают на проблемы с аутентификацией и политиками безопасности, как со стороны Google, так и со стороны Mimecast.

Решение для отправки писем через SMTP Gmail (особенно с двухфакторной аутентификацией)

Основной причиной ошибки 535-5.7.8 Username and Password not accepted при работе с Gmail SMTP, особенно для аккаунтов, использующих собственный домен (например, Google Workspace), является включенная двухфакторная аутентификация (2FA) и отключение поддержки "менее безопасных приложений" со стороны Google. Обычный пароль аккаунта Google в этом случае не подходит для программной аутентификации.

Для решения этой проблемы нам необходимо использовать "пароли приложений" (App Passwords).

  1. Включение двухэтапной аутентификации (2FA):

    Если у вас еще не включена двухэтапная аутентификация для аккаунта Google, вам потребуется ее активировать. Мы переходим в настройки безопасности вашего аккаунта Google и следуем инструкциям по настройке 2FA.

  2. Генерация пароля приложения:

    После включения 2FA, в разделе безопасности аккаунта Google (обычно "Безопасность" -> "Как вы входите в Google" -> "Пароли приложений") мы генерируем специальный 16-значный пароль. Этот пароль предназначен исключительно для программного доступа к вашему аккаунту и будет использоваться вместо обычного пароля в коде 1С.

    Важно: Запишите или скопируйте этот пароль сразу, так как он отображается только один раз. При изменении основного пароля от Gmail-аккаунта также потребуется сгенерировать новый пароль приложения.

  3. Настройка 1С для SMTP Gmail с паролем приложения:

    Теперь мы можем корректно настроить почтовый профиль в 1С. Используем сгенерированный пароль приложения в качестве ПарольSMTP.

    
    Процедура ОтправитьПочтуЧерезGmail()
        ОтправительПольз = "vasya.D@domen.com";
        ПарольПриложенияGMAIL = "ваш_16_значный_пароль_приложения"; // Используем сгенерированный пароль приложения!
                
        Если ЗначениеЗаполнено(ОтправительПольз) И ЗначениеЗаполнено(ПарольПриложенияGMAIL) Тогда
            Профиль = Новый ИнтернетПочтовыйПрофиль;
            Профиль.АдресСервераSMTP = "smtp.gmail.com";
            Профиль.ПользовательSMTP = ОтправительПольз;
            Профиль.ПарольSMTP = ПарольПриложенияGMAIL; 
            Профиль.ИспользоватьSSLSMTP = Истина; // Обязательно используем SSL для Gmail
            Профиль.ПортSMTP = 465; // Стандартный порт для SSL/TLS
            Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
            Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Истина;
                    
            Почта = Новый ИнтернетПочта;
            Попытка
                Почта.Подключиться(Профиль);
                Сообщить("Успешно подключились к SMTP Gmail.");
                        
                Письмо = Новый ИнтернетПочтовоеСообщение; 
                Текст = Письмо.Тексты.Добавить("Это тестовое сообщение из 1С через Gmail SMTP.");
                Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
                Письмо.Тема = "Тестовое письмо из 1С"; 
                Письмо.Отправитель = ОтправительПольз;
                Письмо.ИмяОтправителя = "Вася (1С)";
                Письмо.Получатели.Добавить("arzu.a@yandex.ru"); // Адрес получателя
                        
                Попытка
                    Почта.Послать(Письмо);
                    Сообщить("Письмо успешно отправлено!");
                Исключение
                    Сообщить("Ошибка при отправке письма: " + ОписаниеОшибки());
                КонецПопытки;
                        
            Исключение
                Сообщить("Не удалось подключиться к SMTP Gmail: " + ОписаниеОшибки());
            КонецПопытки;
                    
            Почта.Отключиться();
            Сообщить("Соединение завершено.");
        Иначе
            Сообщить("Не заполнен отправитель или пароль приложения.");
        КонецЕсли;
    КонецПроцедуры
    

    Иногда также может использоваться порт 587 с ИспользоватьSSLSMTP = Истина, что означает использование TLS. В большинстве современных сценариев 465 с SSL более предпочтителен.

Решение для отправки писем через SMTP Mimecast (настройка Anti-Spoofing Policies)

Ошибки типа 550 Submitter failed to authenticate и 550 Anti-Spoofing policy - Inbound not allowed, которые мы видим при работе с Mimecast, требуют более глубокой настройки на стороне самого почтового шлюза Mimecast. Мы выясним, что эти проблемы не связаны напрямую с кодом 1С, а скорее с политиками безопасности вашего почтового домена, управляемыми Mimecast.

  1. 550 Submitter failed to authenticate:

    Эта ошибка указывает на то, что учетные данные, которые мы предоставляем для аутентификации, не соответствуют ожиданиям Mimecast, или учетная запись не настроена для SMTP-отправки.

    Для устранения этой проблемы администратору Mimecast необходимо:

    • Проверить настройки пользователя: Убедиться, что для адреса vasya.D@domen.com включена опция "SMTP submission" в настройках пользователя Mimecast.
    • Пароль Mimecast: Для SMTP-аутентификации через Mimecast обычно требуется использовать специальный облачный пароль Mimecast, а не пароль от Gmail или сторонней системы. Если для пользователя включена двухфакторная аутентификация, она должна быть отключена для возможности использования SMTP-аутентификации или должны быть предоставлены специальные разрешения.
    • Опция "Password Never Expires": Желательно активировать эту опцию для пользователя, чтобы избежать периодических проблем с истечением срока действия пароля.
  2. 550 Anti-Spoofing policy - Inbound not allowed:

    Эта ошибка возникает, когда Mimecast видит письмо, которое выглядит так, будто оно подделывает отправителя (спуфинг), то есть кажется, что оно отправлено из вашего домена, но при этом поступило из источника, который не авторизован Mimecast для такой отправки. Это происходит, например, если вы пытаетесь отправить письмо из 1С, а Mimecast настроен так, что ожидает все исходящие письма вашего домена только через определенные внутренние серверы или IP-адреса.

    Для решения этой проблемы администратору Mimecast необходимо:

    • Настройка политик Anti-Spoofing: Мы создаем "Bypass Policy" (политику обхода) для Anti-Spoofing. Эта политика позволяет разрешить отправку писем от определенных IP-адресов или хостов, с которых отправляются письма из 1С. Например, если 1С-сервер имеет статический IP-адрес, мы добавляем его в исключения политики.
    • Проверка заголовков "From": Mimecast анализирует поля "From" в заголовке и конверте письма. Если ваш домен указан как отправитель, но письмо поступает с нераспознанного IP-адреса, Mimecast может его заблокировать. Убедитесь, что политики настроены корректно, чтобы различать легитимные внутренние отправки от настоящего спуфинга.
    • Настройка SPF, DKIM и DMARC: Если вы используете собственный домен для почты (даже если она размещена на Google Workspace), крайне важно корректно настроить записи SPF (Sender Policy Framework), DKIM (DomainKeys Identified Mail) и DMARC (Domain-based Message Authentication, Reporting, and Conformance). Эти записи позволяют почтовым серверам получателей проверять легитимность отправляемых писем, что значительно снижает вероятность их блокировки как спама или спуфинга. Ваш домен должен быть корректно зарегистрирован в Google Workspace, и все соответствующие записи должны быть добавлены в DNS.

    В случае с Mimecast, наша задача как программистов 1С — предоставить администраторам Mimecast всю необходимую информацию о сервере 1С (IP-адрес, используемые домены отправителей), чтобы они могли внести соответствующие исключения в свои политики безопасности.

Общие рекомендации по настройке почтового профиля в 1С

Независимо от используемого SMTP-сервера, при настройке почтового профиля в 1С мы должны учитывать несколько ключевых аспектов:

  1. Тип протокола и порт:

    Современные почтовые серверы требуют использования защищенных соединений. Всегда старайтесь использовать Профиль.ИспользоватьSSLSMTP = Истина. Для SSL обычно используется порт 465, для TLS (который активируется поверх незащищенного соединения) — порт 587.

  2. Аутентификация:

    Используем Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login. Это наиболее распространенный и поддерживаемый метод аутентификации.

  3. Защищенная аутентификация:

    Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Истина. Это гарантирует, что 1С будет использовать только методы аутентификации, которые передают пароль в зашифрованном виде.

  4. Адрес отправителя и имя:

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

  5. Обработка ошибок:

    Мы всегда окружаем операции подключения и отправки писем блоками Попытка...Исключение...КонецПопытки. Это позволяет нам перехватывать ошибки, выводить их описание и более точно понимать причину сбоя.

Заключение

Как мы видим, успешная отправка писем из 1С через сторонние SMTP-серверы требует не только корректного кода, но и понимания настроек безопасности почтовых служб. В случае с Gmail и двухфакторной аутентификацией, ключом к решению являются "пароли приложений". При работе с корпоративными решениями, такими как Mimecast, мы должны взаимодействовать с администраторами для настройки политик антиспуфинга и аутентификации. Всегда помним о важности использования защищенных соединений (SSL/TLS) и правильной аутентификации для обеспечения надежности и безопасности почтовых отправлений.

← На главную