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

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

Досадная ошибка в настройке почтового клиента может привести к серьезным последствиям. Классический сценарий: при настройке учетной записи по протоколу POP3 в конфигурации 1С:Документооборот забыли установить флажок «Сохранять письма на сервере». В результате почтовый сервер послушно отдал все письма системе 1С и полностью стер их из оригинального почтового ящика. Письма остались только внутри информационной базы 1С.

Что делать в такой ситуации, если пользователям жизненно необходимо вернуть эти письма обратно в веб-интерфейс почты или привычные почтовые клиенты? В этой статье мы подробно разберем, как восстановить утерянные письма, проанализируем доступные методы и выберем наиболее надежные технические решения.

Шаг 1. Анализ архитектуры почты в 1С:Документообороте

Прежде чем приступать к активным действиям, выясним, какой тип почтового клиента используется в вашей информационной базе. От этого напрямую зависит, физически ли хранятся письма в СУБД или они утеряны безвозвратно.

В решениях линейки 1С существует два принципиально разных варианта работы с почтой:

  1. Встроенная почта (доступна в версии КОРП): Это полноценный почтовый клиент. Все входящие и исходящие письма, а также прикрепленные файлы физически записываются в базу данных 1С (хранятся в справочниках и документах, таких как ЭлектронноеПисьмоВходящее). Если у вас настроена именно встроенная почта, вам повезло — все данные гарантированно находятся в безопасности внутри 1С, и мы сможем их выгрузить.
  2. Легкая почта: Этот режим использует базу 1С лишь как транзитный интерфейс. Письма отправляются и принимаются «на лету» без сохранения их тел и вложений в информационной базе (за исключением случаев, когда на основании письма вручную регистрировался документ). Если у вас использовалась легкая почта, и письма были стерты с сервера по протоколу POP3, восстановить их стандартными методами из 1С, увы, не получится. Придется обращаться к системному администратору почтового сервера для восстановления ящика из резервной копии (бэкапа).

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

Способ №1. Выгрузка писем в формат EML и импорт через IMAP (Рекомендуемый ручной метод)

На форумах часто предлагают выгрузить письма в текстовый формат CSV, чтобы затем импортировать его в Microsoft Outlook. Однако этот путь крайне нежелателен. Формат CSV разбивает структуру письма на таблицы, из-за чего полностью теряется сложное HTML-форматирование, а вложенные файлы (картинки, документы) превращаются в нечитаемый массив символов или вовсе пропадают.

Гораздо более технологичный и надежный вариант — выгрузка писем из 1С в файлы формата EML. Формат .eml является международным стандартом для хранения электронных сообщений. Он содержит в себе тему, заголовки, отправителя, получателя, HTML-тело письма и все вложенные файлы в кодировке Base64.

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

  1. Написание обработки выгрузки: Программисту 1С необходимо написать простую внешнюю обработку, которая выполнит запрос к документам ЭлектронноеПисьмоВходящее за нужный период времени.
  2. Формирование файлов: Для каждого найденного письма в коде создается объект платформы ИнтернетПочтовоеСообщение, заполняются его свойства (АдресОтправителя, Тема, Текст, Вложения) и выполняется вызов метода записи сообщения в файл с расширением .eml на локальный диск компьютера.
  3. Подключение по IMAP: На компьютере пользователя устанавливается любой классический почтовый клиент (например, Mozilla Thunderbird или MS Outlook) и настраивается подключение к проблемному почтовому ящику по современному протоколу IMAP. Протокол IMAP, в отличие от POP3, поддерживает двухстороннюю синхронизацию папок.
  4. Импорт писем: Открываем почтовый клиент, выделяем в проводнике операционной системы все выгруженные из 1С файлы .eml и простым перетаскиванием (технологией Drag-and-Drop) переносим их в нужную папку (например, «Входящие») внутри почтового клиента.
  5. Синхронизация с сервером: Почтовый клиент автоматически обнаружит новые локальные письма и загрузит их на сервер. Письма снова окажутся в исходном ящике и станут доступны через Web-интерфейс (Яндекс.Почта, Mail.ru, Gmail и т.д.) со всеми вложениями и правильными датами.

Посмотрим на пример программного кода, который выгружает письмо из базы 1С в файл .eml:


// Создаем объект почтового сообщения платформы
ПисьмоОбъект = Новый ИнтернетПочтовоеСообщение;
ПисьмоОбъект.Тема = ВыборкаПисем.Тема;
ПисьмоОбъект.Отправитель.Адрес = ВыборкаПисем.АдресОтправителя;

// Добавляем получателей
НовыйПолучатель = ПисьмоОбъект.Получатели.Добавить();
НовыйПолучатель.Адрес = ВыборкаПисем.АдресПолучателя;

// Заполняем тело письма (поддерживается HTML)
ПисьмоОбъект.Тексты.Добавить(ВыборкаПисем.ТекстПисьмаHTML, ТипТекстаПочтовогоСообщения.HTML);

// Обходим и добавляем вложения, если они есть
Для Каждого ТекущееВложение Из ВыборкаПисем.Вложения Цикл
    ДанныеФайла = ТекущееВложение.ХранилищеФайла.Получить();
    НовоеВложение = ПисьмоОбъект.Вложения.Добавить(ДанныеФайла, ТекущееВложение.ИмяФайла);
КонецЦикла;

// Записываем сформированное сообщение в файл EML
ПутьКФайлу = "C:\MailExport\" + ВыборкаПисем.Идентификатор + ".eml";
ПисьмоОбъект.Записать(ПутьКФайлу);

Способ №2. Программная загрузка писем напрямую на сервер через IMAP

Существует еще более элегантный автоматизированный способ решения проблемы, который не требует участия сторонних почтовых программ. Платформа 1С позволяет загрузить письма напрямую на сервер в конкретную папку по протоколу IMAP. Для этого используется метод Послать() объекта ИнтернетПочта.

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

Рассмотрим пример кода, реализующий прямое копирование документов из 1С на сервер:


// Настраиваем профиль подключения по IMAP
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераIMAP = "imap.yandex.ru";
Профиль.ПортIMAP = 993;
Профиль.ИспользоватьSSLIMAP = Истина;
Профиль.Пользователь = "your_login@yandex.ru";
// Важно: здесь должен быть специальный пароль приложения, а не обычный пароль от почты!
Профиль.Пароль = "your_app_password"; 

Почта = Новый ИнтернетПочта;

Попытка
    Почта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP);
    
    // Выбираем целевую папку на сервере. Для входящих это обычно "INBOX" или "Входящие"
    Почта.ТекущийПочтовыйЯщик = "INBOX";
    
    // Обходим письма в цикле и отправляем их на сервер
    Пока ВыборкаПисем.Следующий() Цикл
        
        Сообщение = Новый ИнтернетПочтовоеСообщение;
        Сообщение.Тема = ВыборкаПисем.Тема;
        Сообщение.Отправитель.Адрес = ВыборкаПисем.АдресОтправителя;
        Сообщение.Получатели.Добавить(ВыборкаПисем.АдресПолучателя);
        Сообщение.Тексты.Добавить(ВыборкаПисем.ТекстПисьма, ТипТекстаПочтовогоСообщения.HTML);
        
        // Переносим вложения
        Для Каждого ВложениеИзБазы Из ВыборкаПисем.Вложения Цикл
            Сообщение.Вложения.Добавить(ВложениеИзБазы.Данные, ВложениеИзБазы.ИмяФайла);
        КонецЦикла;
        
        // Метод Послать() запишет письмо непосредственно в папку "INBOX" на сервере
        Почта.Послать(Сообщение);
        
    КонецЦикла;
    
    Почта.Отключиться();
    Сообщить("Все письма успешно скопированы на почтовый сервер!");
    
Исключение
    Предупреждение("Произошла ошибка при работе с почтой: " + ОписаниеОшибки());
    Если Почта.Подключено() Тогда
        Почта.Отключиться();
    КонецЕсли;
КонецПопытки;

Технические нюансы и подводные камни, о которых важно знать

При реализации прямого программного метода (Способ №2) вы обязательно столкнетесь с современными политиками безопасности почтовых сервисов. Обратите внимание на следующие важные моменты:

Подводя итог, отметим: если объем потерянных писем невелик (до нескольких десятков), проще всего использовать выгрузку в файлы .eml (Способ №1) с последующим импортом через любой удобный почтовый клиент. Если же счет идет на тысячи писем, то написание небольшой транзитной обработки по протоколу IMAP (Способ №2) сэкономит вам массу времени и сил.

← На главную