Досадная ошибка в настройке почтового клиента может привести к серьезным последствиям. Классический сценарий: при настройке учетной записи по протоколу POP3 в конфигурации 1С:Документооборот забыли установить флажок «Сохранять письма на сервере». В результате почтовый сервер послушно отдал все письма системе 1С и полностью стер их из оригинального почтового ящика. Письма остались только внутри информационной базы 1С.
Что делать в такой ситуации, если пользователям жизненно необходимо вернуть эти письма обратно в веб-интерфейс почты или привычные почтовые клиенты? В этой статье мы подробно разберем, как восстановить утерянные письма, проанализируем доступные методы и выберем наиболее надежные технические решения.
Прежде чем приступать к активным действиям, выясним, какой тип почтового клиента используется в вашей информационной базе. От этого напрямую зависит, физически ли хранятся письма в СУБД или они утеряны безвозвратно.
В решениях линейки 1С существует два принципиально разных варианта работы с почтой:
ЭлектронноеПисьмоВходящее). Если у вас настроена именно встроенная почта, вам повезло — все данные гарантированно находятся в безопасности внутри 1С, и мы сможем их выгрузить.Предположим, что в нашей конфигурации используется полноценная Встроенная почта. Рассмотрим два эффективных способа вернуть письма обратно на сервер.
На форумах часто предлагают выгрузить письма в текстовый формат CSV, чтобы затем импортировать его в Microsoft Outlook. Однако этот путь крайне нежелателен. Формат CSV разбивает структуру письма на таблицы, из-за чего полностью теряется сложное HTML-форматирование, а вложенные файлы (картинки, документы) превращаются в нечитаемый массив символов или вовсе пропадают.
Гораздо более технологичный и надежный вариант — выгрузка писем из 1С в файлы формата EML. Формат .eml является международным стандартом для хранения электронных сообщений. Он содержит в себе тему, заголовки, отправителя, получателя, HTML-тело письма и все вложенные файлы в кодировке Base64.
Разберем по шагам, как реализовать этот метод:
ЭлектронноеПисьмоВходящее за нужный период времени.ИнтернетПочтовоеСообщение, заполняются его свойства (АдресОтправителя, Тема, Текст, Вложения) и выполняется вызов метода записи сообщения в файл с расширением .eml на локальный диск компьютера..eml и простым перетаскиванием (технологией Drag-and-Drop) переносим их в нужную папку (например, «Входящие») внутри почтового клиента.Посмотрим на пример программного кода, который выгружает письмо из базы 1С в файл .eml:
// Создаем объект почтового сообщения платформы
ПисьмоОбъект = Новый ИнтернетПочтовоеСообщение;
ПисьмоОбъект.Тема = ВыборкаПисем.Тема;
ПисьмоОбъект.Отправитель.Адрес = ВыборкаПисем.АдресОтправителя;
// Добавляем получателей
НовыйПолучатель = ПисьмоОбъект.Получатели.Добавить();
НовыйПолучатель.Адрес = ВыборкаПисем.АдресПолучателя;
// Заполняем тело письма (поддерживается HTML)
ПисьмоОбъект.Тексты.Добавить(ВыборкаПисем.ТекстПисьмаHTML, ТипТекстаПочтовогоСообщения.HTML);
// Обходим и добавляем вложения, если они есть
Для Каждого ТекущееВложение Из ВыборкаПисем.Вложения Цикл
ДанныеФайла = ТекущееВложение.ХранилищеФайла.Получить();
НовоеВложение = ПисьмоОбъект.Вложения.Добавить(ДанныеФайла, ТекущееВложение.ИмяФайла);
КонецЦикла;
// Записываем сформированное сообщение в файл EML
ПутьКФайлу = "C:\MailExport\" + ВыборкаПисем.Идентификатор + ".eml";
ПисьмоОбъект.Записать(ПутьКФайлу);
Существует еще более элегантный автоматизированный способ решения проблемы, который не требует участия сторонних почтовых программ. Платформа 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) вы обязательно столкнетесь с современными политиками безопасности почтовых сервисов. Обратите внимание на следующие важные моменты:
conf.cfg, добавив имя вашего почтового сервера в параметр отключения проверок:
IgnoreInternetMailServerCertificateVerificationList=imap.yandex.ru;imap.mail.ru
Подводя итог, отметим: если объем потерянных писем невелик (до нескольких десятков), проще всего использовать выгрузку в файлы .eml (Способ №1) с последующим импортом через любой удобный почтовый клиент. Если же счет идет на тысячи писем, то написание небольшой транзитной обработки по протоколу IMAP (Способ №2) сэкономит вам массу времени и сил.