Почему письма из 1С не сохраняются в папке «Отправленные» на mail.ru и как это исправить?

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

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

Выясним причину: особенности работы протоколов SMTP и IMAP

Для понимания сути проблемы проанализируем разницу в назначении почтовых протоколов:

  1. Протокол SMTP (Simple Mail Transfer Protocol): предназначен исключительно для передачи сообщений от клиента серверу и между серверами. По спецификации протокол SMTP не отвечает за размещение копии отправленного письма в каталогах почтового ящика отправителя. На серверах mail.ru отправка через SMTP сама по себе не инициирует сохранение копии в каталоге «Отправленные».
  2. Полноценные почтовые клиенты (например, Thunderbird или Outlook) после успешной передачи сообщения по SMTP выполняют дополнительное действие — подключаются по протоколу IMAP и записывают отправленное письмо в папку «Отправленные» на сервере с помощью команды APPEND.
  3. Особенности платформы 1С: базовый метод ИнтернетПочта.Послать() отправляет сообщение по протоколу SMTP, но автоматически не выполняет дозапись в каталоги IMAP, если это отдельно не предусмотрено прикладным кодом конфигурации или настройками почтового клиента в 1С.
  4. Специфика наименования папок mail.ru: в протоколе IMAP системные папки почтового ящика могут иметь специфические имена (например, Sent, Sent Messages или закодированные в Modified UTF-7, такие как &BB4EQgQ,BEAEMA-). Попытка прямой записи в несуществующий строковый путь «Отправленные» часто приводит к системной ошибке.

Способ 1. Настройка отправки скрытой копии и правил фильтрации на сервере (рекомендуемый)

Рассмотрим наиболее надежный и простой способ, не требующий доработки программного кода конфигурации 1С. Метод основан на автоматической отправке скрытой копии письма самому себе с последующей сортировкой на стороне mail.ru.

  1. Включение скрытой копии в 1С: перейдем в карточку системной или персональной учетной записи электронной почты (раздел НСИ и администрирование — Органайзер — Учетные записи электронной почты) и включим признак «Отправлять скрытые копии писем на этот адрес» (или укажем адрес текущего ящика в поле для копий).
  2. Создание целевой папки на mail.ru: зайдем в веб-интерфейс почты mail.ru и создадим отдельную папку (например, с наименованием «Отправлено из 1С») или будем использовать стандартную папку.
  3. Настройка правила фильтрации: в настройках почтового ящика mail.ru (раздел Все настройки — Правила фильтрации) добавим новое правило:
    1. В условии укажем: поле «От кого» (Отправитель) содержит адрес вашего ящика (например, mybox@mail.ru).
    2. В действии выберем: «Поместить письмо в папку» и укажем папку «Отправлено из 1С» (или «Отправленные»).
    3. Дополнительно включим опцию «Пометить прочитанным», чтобы входящие копии собственных писем не отображались как новые непрочитанные сообщения.

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

Способ 2. Использование протокола IMAP и штатной синхронизации в типовых конфигурациях

Разберем вариант настройки учетной записи через протокол IMAP в типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП):

  1. Пароль внешнего приложения: для работы по протоколам IMAP и SMTP почтовый сервис mail.ru требует создания специального пароля приложения. Перейдем в настройки безопасности аккаунта mail.ru (раздел Пароль и безопасность — Пароли для внешних приложений), сгенерируем отдельный пароль и укажем его в настройках учетной записи 1С вместо основного пароля.
  2. Настройка протокола: при настройке сервера входящей почты выберем протокол IMAP (сервер imap.mail.ru, порт 993, шифрование SSL), а для исходящей почты — SMTP (сервер smtp.mail.ru, порт 465, шифрование SSL).
  3. Флаг сохранения писем: если используемая версия конфигурации поддерживает интеграцию папок IMAP, включим опцию сохранения копий исходящих писем в папку отправленных сообщений на сервере.

Способ 3. Программное сохранение копии письма через объект ИнтернетПочта

Посмотрим, как реализовать программное сохранение копии отправленного сообщения в нужный каталог сервера по протоколу IMAP средствами встроенного языка 1С. Разберем по шагам логику работы с объектом ИнтернетПочта:


// 1. Создаем объект и настраиваем профиль подключения к серверу
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль.АдресСервераSMTP = "smtp.mail.ru";
ПочтовыйПрофиль.ПортSMTP          = 465;
ПочтовыйПрофиль.ИспользоватьSSLSMTP = Истина;
ПочтовыйПрофиль.ПользовательSMTP = "mybox@mail.ru";
ПочтовыйПрофиль.ПарольSMTP       = "ПарольПриложения";

ПочтовыйПрофиль.АдресСервераIMAP = "imap.mail.ru";
ПочтовыйПрофиль.ПортIMAP         = 993;
ПочтовыйПрофиль.ИспользоватьSSLIMAP = Истина;
ПочтовыйПрофиль.ПользовательIMAP = "mybox@mail.ru";
ПочтовыйПрофиль.ПарольIMAP       = "ПарольПриложения";

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

Попытка
    // 2. Подключаемся к почтовому серверу
    Почта.Подключиться(ПочтовыйПрофиль, ПротоколИнтернетПочты.IMAP);
    
    // 3. Отправляем письмо получателю по протоколу SMTP
    Почта.Послать(Письмо, , ПротоколИнтернетПочты.SMTP);
    
    // 4. Получаем структуру каталогов почтового ящика для определения точного пути
    ТаблицаКаталогов = Почта.ПолучитьТаблицуКаталогов();
    
    // 5. Устанавливаем целевой почтовый ящик (каталог на сервере)
    // Системное имя папки может быть "Sent" или пользовательским, например "Отправлено из 1С"
    Почта.ТекущийПочтовыйЯщик = "Sent";
    
    // 6. Сохраняем копию письма в выбранный каталог через IMAP
    Почта.Послать(Письмо, , ПротоколИнтернетПочты.IMAP);
    
    Почта.Отключиться();
Исключение
    Почта.Отключиться();
    ВызватьИсключение ОписаниеОшибки();
КонецПопытки;

Важные замечания при реализации:

  1. Метод ПолучитьТаблицуКаталогов() позволяет динамически проверить реальные имена папок на сервере, избегая ошибок несуществующих каталогов при русскоязычных названиях.
  2. Для корректного разделения потоков вызов Почта.Послать() с третьим параметром ПротоколИнтернетПочты.IMAP выполняет запись сообщения в установленный ТекущийПочтовыйЯщик без повторной физической пересылки адресату.
← На главную