Как реализовать отправку почты из 1С 7.7 через Gmail в условиях современных требований безопасности

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Многие разработчики, поддерживающие системы на базе 1С:Предприятие 7.7, столкнулись с внезапным прекращением работы почтовых сервисов через протокол SMTP. Основная причина заключается в том, что крупные почтовые провайдеры, такие как Gmail и Mail.ru, заблокировали возможность авторизации по обычному логину и паролю в целях повышения безопасности. Теперь стандартный метод через объект CDO.Message выдает ошибку аутентификации. В этой статье мы подробно разберем, как адаптировать старую систему к новым реалиям, рассмотрим использование паролей приложений, специализированных компонент и современных скриптовых решений.

Способ 1: Использование специальных паролей приложений

Google убрал из интерфейса прямую настройку «разрешить доступ небезопасным приложениям», однако оставил механизм Паролей приложений. Этот метод создает уникальный 16-значный код, который заменяет ваш основной пароль в настройках 1С.

Разберем алгоритм действий по шагам:

  1. Включение двухфакторной аутентификации (2FA): Это обязательное условие. Без включенной привязки к телефону раздел создания паролей приложений будет недоступен. Зайдите в настройки безопасности вашего Google-аккаунта и активируйте 2FA.
  2. Создание пароля: Перейдите в раздел управления аккаунтом. В строке поиска введите «Пароли приложений» или воспользуйтесь прямой ссылкой в настройках безопасности.
  3. Генерация кода: Выберите в списках тип приложения «Почта» и устройство «Компьютер Windows». Система выдаст вам код (например, abcd efgh ijkl mnop).
  4. Настройка в 1С: Вставьте полученный пароль (без пробелов) в поле пароля при настройке конфигурации CDO.

Рассмотрим пример кода на языке 1С 7.7 для отправки через CDO с использованием пароля приложения:


// Создание объекта сообщения
Почта = СоздатьОбъект("CDO.Message");
Конфиг = СоздатьОбъект("CDO.Configuration");

// Настройка полей конфигурации SMTP
Поля = Конфиг.Fields;
Поля.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.gmail.com";
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 465;
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = 1; // Обязательно SSL
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1;
Поля.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "your-email@gmail.com";
Поля.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = "ваш_пароль_приложения";
Поля.Update();

Почта.Configuration = Конфиг;
Почта.From = "your-email@gmail.com";
Почта.To = "client@example.com";
Почта.Subject = "Тестовое письмо из 1С 7.7";
Почта.TextBody = "Текст сообщения";

Попытка
    Почта.Send();
    Предупреждение("Письмо успешно отправлено!");
Исключение
    Предупреждение("Ошибка при отправке: " + ОписаниеОшибки());
КонецПопытки;

Способ 2: Решение проблемы устаревшего TLS через stunnel

Выясним причину, по которой даже с верным паролем почта может не уходить. 1С 7.7 использует системные библиотеки Windows, которые в старых версиях ОС (Windows 7, Server 2008) не поддерживают протоколы шифрования TLS 1.2 и TLS 1.3. Gmail же требует современное шифрование.

Чтобы не переписывать код и не обновлять ОС, что актуально для Windows Server 2008/2012, мы можем использовать программу-прокладку stunnel. Она работает как локальный прокси-сервер: 1С отправляет письмо на 127.0.0.1 без шифрования, а stunnel «оборачивает» его в актуальный TLS и передает на сервера Google.

Посмотрим, как настроить эту связку:

  1. Скачайте и установите stunnel.
  2. В конфигурационном файле stunnel.conf пропишите следующие параметры:

[gmail-smtp]
client = yes
accept = 127.0.0.1:25
connect = smtp.gmail.com:465
checkHost = smtp.gmail.com
OCSPia = yes

После этого в коде 1С достаточно указать smtpserver = "127.0.0.1", smtpserverport = 25 и smtpusessl = 0. Вся нагрузка по шифрованию ляжет на стороннюю утилиту.

Способ 3: Использование PowerShell для отправки

Проанализируем современный подход, который не требует регистрации внешних DLL компонент в системе. В каждой современной Windows есть PowerShell, который отлично справляется с сетевыми задачами. Мы можем сформировать скрипт из 1С и запустить его командой системы.

Разберем пример реализации такой функции:


Процедура ОтправитьЧерезPS(Кому, Тема, Текст)
    ПарольПриложения = "ваш_пароль_приложения";
    Отправитель = "your-email@gmail.com";
    
    // Формируем строку команды
    ТекстСкрипта = "$msgh = New-Object Net.Mail.MailMessage;
    $msgh.From = '" + Отправитель + "';
    $msgh.To.Add('" + Кому + "');
    $msgh.Subject = '" + Тема + "';
    $msgh.Body = '" + Текст + "';
    $smtp = New-Object Net.Mail.SmtpClient('smtp.gmail.com', 587);
    $smtp.EnableSsl = $true;
    $smtp.Credentials = New-Object System.Net.NetworkCredential('" + Отправитель + "', '" + ПарольПриложения + "');
    $smtp.Send($msgh);";
    
    // Записываем во временный файл .ps1 или запускаем напрямую
    Команда = "powershell -ExecutionPolicy Bypass -Command  " + ТекстСкрипта;
    КомандаСистемы(Команда);
КонецПроцедуры

Этот метод хорош тем, что он обходит ограничения старых библиотек COM и использует возможности .NET Framework, установленного в системе.

Способ 4: Внешние компоненты (DialMail и curl)

Если вам необходим более гибкий контроль над процессом (например, работа с IMAP, обработка вложений или детальное логирование), стоит рассмотреть специализированные инструменты. Популярная в кругах 1С-разработчиков компонента DialMail.dll до сих пор справляется со своими задачами, если правильно указать порты и использовать те же пароли приложений.

Также эффективным инструментом является curl (или его адаптация curl1c). Это консольная утилита, которая поддерживает практически все современные протоколы передачи данных. Вызов curl из 1С позволяет гибко настраивать заголовки писем и параметры авторизации.

При использовании массовых рассылок (например, отправка счетов сотням клиентов) помните о лимитах Google. Даже при использовании пароля приложения, слишком частая отправка может привести к временной блокировке IP-адреса или аккаунта. В таких случаях мы рекомендуем вставлять паузы между письмами (от 5 до 60 секунд), чтобы алгоритмы антиспама не срабатывали на вашу учетную запись.

Важное замечание: При работе с корпоративными почтами Google Workspace (на собственном домене), создание паролей приложений может быть запрещено администратором организации. В этом случае необходимо сначала разрешить эту опцию в консоли администратора Google.

← На главную