Почему не все письма уходят из 1С при массовой рассылке через Outlook?

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

При реализации механизмов массовой рассылки из 1С:Предприятие разработчики часто сталкиваются с ситуацией, когда программный код отрабатывает без ошибок, счетчики показывают успешную отправку, но до адресатов доходит лишь часть сообщений. Особенно остро эта проблема проявляется при интеграции с сервисами Microsoft 365 (Office 365). Разберем детально, почему так происходит, и как оптимизировать код для стабильной доставки почты.

Анализ исходной ситуации и поиск «узких мест»

В типовом сценарии для экономии ресурсов и времени часто используется механизм Слепых копий (BCC). Рассмотрим стандартный подход: мы создаем один объект ИнтернетПочтовоеСообщение, добавляем в него несколько адресатов в коллекцию СлепыеКопии и отправляем пачкой по 5–10 адресов. На первый взгляд, это логично, однако именно здесь кроются основные технические риски.

Проанализируем основные причины «исчезновения» писем:

  1. Синтаксические ошибки в адресах: Если в пачке из 5 получателей хотя бы один адрес указан неверно (например, содержит запятую внутри строки или лишние пробелы), сервер Office 365 может отклонить все письмо целиком для всей группы.
  2. Лимиты провайдера (Throttling): Сервера Microsoft имеют жесткие ограничения на количество писем в минуту (обычно около 30 сообщений) через SMTP-аутентификацию.
  3. Особенности папки «Отправленные»: При отправке через SMTP письма не всегда автоматически попадают в Outlook, даже если они были успешно доставлены получателям.

Решение №1: Правильный парсинг и очистка адресов

Одной из главных проблем является хранение нескольких email-адресов в одной строке через запятую в контактной информации 1С. Когда код выполняет НовоеПисьмо.СлепыеКопии.Добавить(Элемент.КакСвязаться), в объект передается строка вида "boss@mail.ru, secretary@mail.ru". Почтовый сервер воспринимает это не как двух получателей, а как один некорректный адрес. Выясним, как правильно обработать такие данные.

Рассмотрим пример кода, который разбивает строку на отдельные валидные адреса перед добавлением в сообщение:


// Разбиваем строку по запятым и точке с запятой
МассивАдресов = СтрРазделить(Элемент.КакСвязаться, ",;");

Для Каждого ТекущийАдрес Из МассивАдресов Цикл
    ОчищенныйАдрес = СокрЛП(ТекущийАдрес);
    Если НЕ ПустаяСтрока(ОчищенныйАдрес) Тогда
        // Добавляем каждый адрес как отдельный элемент коллекции
        НовоеПисьмо.СлепыеКопии.Добавить(ОчищенныйАдрес);
    КонецЕсли;
КонецЦикла;

Такой подход гарантирует, что 1С передаст серверу четкий список получателей, что снижает риск отказа в обработке всего пакета данных.

Решение №2: Отказ от BCC в пользу персональной отправки

Использование слепых копий для массовых рассылок — это «советский» метод, который современные спам-фильтры (Exchange Online Protection) часто помечают как подозрительный. Если ваша задача — гарантированная доставка, рассмотрим вариант персональной отправки каждому клиенту.

Преимущества персональной отправки:

Проанализируем пример кода для поштучной отправки с контролем соединения:


Почта = Новый ИнтернетПочта;
Попытка
    Почта.Подключиться(Профиль);
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

Для Каждого Элемент Из Получатели Цикл
    Сообщение = Новый ИнтернетПочтовоеСообщение;
    Сообщение.Отправитель = "info@mycompany.ru";
    Сообщение.Тема = "Актуальные остатки";
    
    // Добавляем только одного получателя
    Сообщение.Получатели.Добавить(Элемент.Email);
    
    Текст = Сообщение.Тексты.Добавить();
    Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;
    Текст.Текст = "Добрый день! Ваши данные во вложении.";
    
    Попытка
        Почта.Послать(Сообщение);
        // Логируем успешную отправку в регистр или журнал
    Исключение
        Сообщить("Не удалось отправить на адрес " + Элемент.Email);
    КонецПопытки;
КонецЦикла;

Почта.Отключиться();

Решение №3: Обход лимитов (Throttling) и паузы при отправке

Если мы отправляем письма слишком быстро, сервер может начать «молча» игнорировать запросы или возвращать ошибку 421 4.7.206 ADDB Submitter Rate Limit Exceeded. Чтобы этого избежать, нам нужно внедрить искусственные паузы в процесс отправки. Выясним, как это сделать в 1С.

Посмотрим на пример реализации паузы между отправками, чтобы не превышать лимит в 30 писем в минуту:


СчетчикПисем = 0;
Для Каждого Элемент Из Получатели Цикл
    // Код формирования и отправки сообщения...
    Почта.Послать(Сообщение);
    
    СчетчикПисем = СчетчикПисем + 1;
    
    // После каждого 20-го письма делаем паузу 60 секунд
    Если СчетчикПисем % 20 = 0 Тогда
        Сообщить("Техническая пауза для соблюдения лимитов сервера...");
        // В управляемых формах можно использовать ожидание
        // Или команду системы для задержки
        КомандаСистемы("timeout /t 60 /nobreak", Ложь); 
    КонецЕсли;
КонецЦикла;

Обратите внимание, что значение Профиль.Таймаут (например, 999) отвечает лишь за время ожидания ответа от сервера, но не за частоту обращений. Настройка частоты должна регулироваться именно логикой вашего алгоритма.

Решение №4: Диагностика на стороне сервера и логирование

Если письма все равно теряются, необходимо проверить настройки учетной записи Office 365. Важно убедиться, что параметр MessageCopyForSentItemsEnabled включен, иначе вы не увидите результаты работы 1С в папке «Отправленные» вашего Outlook.

Рекомендации по глубокой диагностике:

  1. Проверка SMTP-логов: Попросите системного администратора выгрузить логи SMTP-сессий. Там будет видно, принимает сервер письмо с кодом 250 OK или сбрасывает соединение.
  2. Использование внешних сервисов: Если объем рассылок превышает 1000 писем в день, рассмотрите использование специализированных сервисов (например, SendPulse, UniSender или почтовые шлюзы через API). Это снимет нагрузку с основного почтового ящика и обеспечит детальную аналитику по открытиям писем.
  3. Технологический журнал: В самой 1С можно настроить сбор логов для поиска ошибок сетевого взаимодействия, если проблема кроется в нестабильном канале связи.

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

← На главную