Рассылка электронных писем из системы 1С 7.7 — задача классическая, но в современных реалиях она сопряжена с множеством технических трудностей. При использовании внешней компоненты DialMail программисты часто сталкиваются с ситуацией, когда первые несколько десятков писем уходят успешно, а затем процесс прерывается ошибкой "Connection reset by peer". Разберем подробно, почему это происходит и как выстроить надежную систему рассылки, которая не будет блокироваться почтовыми серверами.
Первым делом проанализируем ситуацию. Современные почтовые гиганты (Gmail, Yandex, Mail.ru) ведут активную борьбу со спамом. Даже если вы отправляете легитимные документы (акты сверки, счета, уведомления), их алгоритмы могут расценить высокую активность вашего IP-адреса как подозрительную. Основные причины сбоев:
DialMail была создана давно и может некорректно работать с актуальными требованиями TLS/SSL без дополнительных настроек.Рассмотрим самый надежный архитектурный подход внутри 1С 7.7. Вместо того чтобы пытаться отправить все письма в одном цикле Пока ... Цикл, мы организуем «очередь». Это позволит нам имитировать поведение реального пользователя и делать необходимые паузы.
Разберем по шагам, как это реализовать:
Форма.ОбработкаОжидания(), чтобы запускать процедуру отправки каждые 30-60 секунд.Пример логики на языке 1С 7.7:
Процедура ОтправитьПорциюПисем()
Перем ТекстОшибки;
// Предположим, СписокПисем - это глобальная ТаблицаЗначений с данными
Если СписокПисем.КоличествоСтрок() = 0 Тогда
Форма.ОбработкаОжидания("ОтправитьПорциюПисем", 0); // Выключаем таймер
Предупреждение("Рассылка завершена успешно!");
Возврат;
КонецЕсли;
Счетчик = 0;
Пока (СписокПисем.КоличествоСтрок() > 0) И (Счетчик < 5) Цикл
СписокПисем.ПолучитьСтрокуПоНомеру(1);
// Настройка компоненты DialMail
SMTP.РабочийКаталог = КаталогИБ();
Если SMTP.Подключиться() = 1 Тогда
Если SMTP.ОтправитьПисьмо(СписокПисем.Адрес, СписокПисем.Тема, СписокПисем.Текст, СписокПисем.Файл) = 1 Тогда
СписокПисем.УдалитьСтроку(1);
Счетчик = Счетчик + 1;
Иначе
ТекстОшибки = SMTP.ПоследняяОшибка;
Сообщить("Ошибка при отправке: " + ТекстОшибки);
Прервать; // Делаем паузу до следующего запуска таймера
КонецЕсли;
SMTP.Отключиться();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Как отмечают опытные разработчики, длительная работа с объектом DialMail.SMTP без его пересоздания может приводить к «залипанию» памяти или дескрипторов соединений. Проанализируем ситуацию: если у вас тысячи писем, сервер на той стороне (например, Exchange или Google) может перестать успевать обрабатывать поток.
Важный совет: Обязательно вызывайте метод Отключиться() после каждой порции писем, а лучше — делайте полную инициализацию объекта СоздатьОбъект("DialMail.SMTP") каждые 50-100 сообщений. Это гарантирует сброс всех сетевых буферов.
Если ваша компания переросла лимиты обычных почтовых ящиков, стоит рассмотреть переход на специализированные сервисы (например, UniSender, SendPulse или Mailgun). Они позволяют отправлять тысячи писем без риска попасть в бан.
Для 1С 7.7 есть два пути интеграции с такими сервисами:
DialMail вы просто указываете адрес сервера сервиса (например, smtp.sendpulse.com) и специальный логин/пароль. Для 1С это будет выглядеть как обычная отправка, но лимиты будут значительно выше.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()
Выясним причину, по которой многие старые обработки перестали работать в 2023-2024 годах. Почтовые сервисы (Yandex, Gmail) отключили поддержку «небезопасных приложений» и требуют использования паролей приложений.
Что нужно сделать:
DialMail вместо основного пароля от ящика.Если же компонента DialMail выдает ошибку протокола TLS (так как она не поддерживает TLS 1.2 или 1.3), рекомендуется использовать утилиту stunnel. Она работает как посредник: 1С отправляет письмо на localhost без шифрования, а stunnel подхватывает его, шифрует по современным стандартам и передает на сервер Yandex или Google.
Подведем итоги нашего анализа. Чтобы ваша рассылка в 1С 7.7 работала как часы, придерживайтесь следующей стратегии:
ОбработкаОжидания.SPF и DKIM записи для вашего домена, иначе письма будут уходить «в никуда» или блокироваться сервером еще на этапе рукопожатия (handshake).Соблюдение этих правил позволит вам эффективно использовать 1С 7.7 для массовых коммуникаций с контрагентами, не опасаясь внезапных обрывов связи с почтовым сервером.