Как организовать массовую рассылку писем из 1С 7.7 через DialMail без блокировок и ошибок

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

Рассылка электронных писем из системы 1С 7.7 — задача классическая, но в современных реалиях она сопряжена с множеством технических трудностей. При использовании внешней компоненты DialMail программисты часто сталкиваются с ситуацией, когда первые несколько десятков писем уходят успешно, а затем процесс прерывается ошибкой "Connection reset by peer". Разберем подробно, почему это происходит и как выстроить надежную систему рассылки, которая не будет блокироваться почтовыми серверами.

Выясняем причины блокировок и разрыва соединения

Первым делом проанализируем ситуацию. Современные почтовые гиганты (Gmail, Yandex, Mail.ru) ведут активную борьбу со спамом. Даже если вы отправляете легитимные документы (акты сверки, счета, уведомления), их алгоритмы могут расценить высокую активность вашего IP-адреса как подозрительную. Основные причины сбоев:

  1. Суточные лимиты на отправку: Даже на бизнес-аккаунтах существуют ограничения (например, от 150 до 1500 писем в сутки в зависимости от провайдера).
  2. Частота запросов: Если 1С пытается отправить 100 писем за одну минуту через одно и то же соединение, сервер может принудительно его разорвать.
  3. Устаревшие протоколы: Компонента DialMail была создана давно и может некорректно работать с актуальными требованиями TLS/SSL без дополнительных настроек.
  4. Длительность сессии: Почтовые сервера не любят слишком долгих открытых SMTP-сессий. Если передача данных идет «одним потоком» слишком долго, соединение сбрасывается.

Решение 1: Реализация очереди отправки через ОбработкаОжидания

Рассмотрим самый надежный архитектурный подход внутри 1С 7.7. Вместо того чтобы пытаться отправить все письма в одном цикле Пока ... Цикл, мы организуем «очередь». Это позволит нам имитировать поведение реального пользователя и делать необходимые паузы.

Разберем по шагам, как это реализовать:

  1. Создание реестра: Сформируем таблицу или список значений, куда запишем все адреса, пути к файлам вложений и тексты писем.
  2. Порционная отправка: Будем брать из очереди, например, по 5 писем за один проход.
  3. Использование системного таймера: Применим функцию Форма.ОбработкаОжидания(), чтобы запускать процедуру отправки каждые 30-60 секунд.

Пример логики на языке 1С 7.7:


Процедура ОтправитьПорциюПисем()
    Перем ТекстОшибки;
    // Предположим, СписокПисем - это глобальная ТаблицаЗначений с данными
    Если СписокПисем.КоличествоСтрок() = 0 Тогда
        Форма.ОбработкаОжидания("ОтправитьПорциюПисем", 0); // Выключаем таймер
        Предупреждение("Рассылка завершена успешно!");
        Возврат;
    КонецЕсли;

    Счетчик = 0;
    Пока (СписокПисем.КоличествоСтрок() > 0) И (Счетчик < 5) Цикл
        СписокПисем.ПолучитьСтрокуПоНомеру(1);
        
        // Настройка компоненты DialMail
        SMTP.РабочийКаталог = КаталогИБ();
        Если SMTP.Подключиться() = 1 Тогда
            Если SMTP.ОтправитьПисьмо(СписокПисем.Адрес, СписокПисем.Тема, СписокПисем.Текст, СписокПисем.Файл) = 1 Тогда
                СписокПисем.УдалитьСтроку(1);
                Счетчик = Счетчик + 1;
            Иначе
                ТекстОшибки = SMTP.ПоследняяОшибка;
                Сообщить("Ошибка при отправке: " + ТекстОшибки);
                Прервать; // Делаем паузу до следующего запуска таймера
            КонецЕсли;
            SMTP.Отключиться();
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Решение 2: Периодическое переподключение и очистка кэша

Как отмечают опытные разработчики, длительная работа с объектом DialMail.SMTP без его пересоздания может приводить к «залипанию» памяти или дескрипторов соединений. Проанализируем ситуацию: если у вас тысячи писем, сервер на той стороне (например, Exchange или Google) может перестать успевать обрабатывать поток.

Важный совет: Обязательно вызывайте метод Отключиться() после каждой порции писем, а лучше — делайте полную инициализацию объекта СоздатьОбъект("DialMail.SMTP") каждые 50-100 сообщений. Это гарантирует сброс всех сетевых буферов.

Решение 3: Использование специализированных SMTP-релеев

Если ваша компания переросла лимиты обычных почтовых ящиков, стоит рассмотреть переход на специализированные сервисы (например, UniSender, SendPulse или Mailgun). Они позволяют отправлять тысячи писем без риска попасть в бан.

Для 1С 7.7 есть два пути интеграции с такими сервисами:

  1. Настройка SMTP-релея: В настройках компоненты DialMail вы просто указываете адрес сервера сервиса (например, smtp.sendpulse.com) и специальный логин/пароль. Для 1С это будет выглядеть как обычная отправка, но лимиты будут значительно выше.
  2. Использование HTTP API: Это более современный способ. Вместо протокола SMTP мы используем HTTP-запросы. Для этого в 1С 7.7 можно применить объект WinHttpRequest.

Разберем пример инициализации HTTP запроса для отправки через API:


// Пример создания объекта для HTTP запросов
HttpЗапрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
HttpЗапрос.Open("POST", "https://api.mailservice.com/v3/send", 0);
HttpЗапрос.SetRequestHeader("Authorization", "Bearer " + ВашТокен);
HttpЗапрос.SetRequestHeader("Content-Type", "application/json");
// Далее формируется тело запроса и вызывается Send()

Решение 4: Обход проблем с TLS и современными методами авторизации

Выясним причину, по которой многие старые обработки перестали работать в 2023-2024 годах. Почтовые сервисы (Yandex, Gmail) отключили поддержку «небезопасных приложений» и требуют использования паролей приложений.

Что нужно сделать:

Если же компонента DialMail выдает ошибку протокола TLS (так как она не поддерживает TLS 1.2 или 1.3), рекомендуется использовать утилиту stunnel. Она работает как посредник: 1С отправляет письмо на localhost без шифрования, а stunnel подхватывает его, шифрует по современным стандартам и передает на сервер Yandex или Google.

Резюме для стабильной работы

Подведем итоги нашего анализа. Чтобы ваша рассылка в 1С 7.7 работала как часы, придерживайтесь следующей стратегии:

  1. Не делайте все сразу: Используйте справочник или таблицу для очереди и отправляйте письма пачками через ОбработкаОжидания.
  2. Следите за паузами: Перерыв в 30 секунд между пачками по 5-10 писем значительно снижает вероятность блокировки.
  3. Используйте актуальные доступы: Только «пароли приложений» гарантируют успешную авторизацию.
  4. Проверяйте заголовки: Убедитесь, что ваш системный администратор настроил SPF и DKIM записи для вашего домена, иначе письма будут уходить «в никуда» или блокироваться сервером еще на этапе рукопожатия (handshake).

Соблюдение этих правил позволит вам эффективно использовать 1С 7.7 для массовых коммуникаций с контрагентами, не опасаясь внезапных обрывов связи с почтовым сервером.

← На главную