Как восстановить письма на почтовом сервере, если 1С скачала их и удалила?

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

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

Выясним причину удаления писем с сервера

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

Почему повторная отправка через 1С не подходит

Рассмотрим вариант переотправки писем через SMTP средствами 1С (создавая документ ЭлектронноеПисьмоИсходящее). Такой подход имеет два ключевых ограничения:

  1. Подмена адреса отправителя. Почтовый сервис Mail.ru и большинство других SMTP-серверов при отправке принудительно заменяют поле «От кого» на адрес авторизованной учетной записи либо блокируют отправку из соображений безопасности.
  2. Сброс оригинальной даты. Сервер присвоит всем переотправленным письмам текущую дату и время обработки.

Шаг 1. Выгрузка писем из 1С в файлы формата .eml

Посмотрим, как выгрузить входящую почту обратно на диск. В конфигурациях на базе 1С:Библиотеки Стандартных Подсистем (например, 1С:Управление торговлей 11) входящие сообщения хранятся в документах ЭлектронноеПисьмоВходящее.

Для каждого документа мы можем сформировать объект ИнтернетПочтовоеСообщение и получить его исходный двоичный код формата MIME/EML с помощью метода ПолучитьИсходныеДанные().

Рассмотрим пример кода обработки в 1С для выгрузки писем в файлы EML:


Выборка = Документы.ЭлектронноеПисьмоВходящее.Выбрать();
Пока Выборка.Следующий() Цикл
    ОбъектПисьмо = Выборка.ПолучитьОбъект();
    
    // Формируем интернет-почтовое сообщение из документа 1С
    ПочтовоеСообщение = РаботаСПочтойВызовСервера.СоздатьИнтернетПочтовоеСообщениеИзДокумента(ОбъектПисьмо);
    
    // Получаем сырые двоичные данные письма в формате EML
    ДвоичныеДанные = ПочтовоеСообщение.ПолучитьИсходныеДанные();
    
    // Сохраняем файл на диск
    ИмяФайла = "C:\EmailExport\letter_" + Формат(ОбъектПисьмо.Дата, "ДФ=yyyyMMdd_HHmmss") + ".eml";
    ДвоичныеДанные.Записать(ИмяФайла);
КонецЦикла;

Обратите внимание: перед запуском любых групповых обработок обязательно создайте резервную копию базы данных 1С.

Шаг 2. Импорт писем на сервер через IMAP

Разберем по шагам процесс загрузки файлов .eml обратно на почтовый сервер с сохранением всех заголовков, вложений и исходных дат:

  1. Установим на ПК почтовый клиент, поддерживающий импорт EML (например, Mozilla Thunderbird).
  2. Настроим в почтовом клиенте целевой почтовый ящик по протоколу IMAP.
  3. Перетащим мышью (метод Drag-and-Drop) выгруженные файлы .eml из папки на диске в нужную папку почтового ящика в почтовом клиенте.
  4. Дождемся окончания синхронизации: почтовый клиент загрузит письма по протоколу IMAP на сервер Mail.ru, полностью восстановив архив.

Как предотвратить проблему в будущем

Проанализируем настройки почты в 1С. Чтобы предотвратить повторение этой ситуации, перейдем в раздел НСИ и администрирование > Органайзер > Почта и выполним настройки:

  1. Переведем протокол получения почты с POP3 на IMAP.
  2. Если необходимо использовать именно POP3, включим опцию Оставлять письма на сервере (или снимем флаг Удалять письма с сервера).
← На главную