Как сохранить письмо в папке «Отправленные» Яндекс.Почты при программной отправке из 1С

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

При переходе с обычных почтовых клиентов на программную отправку почты напрямую из 1С:Предприятие многие разработчики сталкиваются с неприятной особенностью: письма успешно уходят получателям, но совершенно не отображаются в папке «Отправленные» (Sent) в веб-интерфейсе Яндекс.Почты или других клиентах. Это происходит потому, что протокол SMTP, отвечающий за пересылку сообщений, сам по себе не обязан сохранять копию письма в почтовом ящике отправителя — это задача почтового сервера или клиента.

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

Способ 1. Принудительное копирование письма в папку через протокол IMAP

Разберем самый надежный технический способ. Суть его заключается в том, что после успешной отправки сообщения по протоколу SMTP, мы подключаемся к почтовому ящику по протоколу IMAP и принудительно «кладем» копию этого письма в папку для отправленных сообщений. Рассмотрим пример кода, реализующий этот механизм.

Для начала проанализируем типовой алгоритм работы с объектом ИнтернетПочта:


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

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

Важный нюанс: Имя папки "Sent" является стандартным, но в зависимости от настроек локализации Яндекс.Почты или конкретного аккаунта, папка может называться "Отправленные" или "Sent Messages". Чтобы сделать ваш код универсальным, рекомендуется предварительно получить список доступных папок методом ИнтернетПочта.ПолучитьПапки() и найти нужную по косвенным признакам или сопоставлению имен.

Способ 2. Использование настроек Библиотеки стандартных подсистем (БСП)

Если вы работаете в современной конфигурации (например, Управление торговлей 11, ERP 2 или Бухгалтерия предприятия 3.0), то, скорее всего, в вашей системе используется Библиотека стандартных подсистем. Проанализируем настройки справочника «Учетные записи электронной почты». При необходимости можно использовать инструмент для получения настроек учетных записей электронной почты.

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

  1. Перейдите в раздел администрирования или настроек почты.
  2. Откройте карточку используемой учетной записи.
  3. Найдите флаг «Оставлять копии писем на сервере» или «Сохранять отправленные письма в папке на сервере».
  4. Убедитесь, что для учетной записи корректно настроен доступ не только по протоколу SMTP, но и по IMAP, так как именно он используется для синхронизации папок.

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

Способ 3. Использование скрытой копии (BCC) на свой адрес

Выясним причину популярности этого метода и его недостатки. Идея проста: при программном формировании письма в поле СкрытыеКопии (BCC) добавляется адрес самого отправителя.


Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Отправитель.Адрес = "my-mail@yandex.ru";
// Добавляем себя в скрытую копию
СкрытыйПолучатель = Письмо.СкрытыеКопии.Добавить();
СкрытыйПолучатель.Адрес = "my-mail@yandex.ru";

Рассмотрим плюсы и минусы такого подхода:

Технические требования Яндекса для корректной работы

Посмотрим на ситуацию со стороны сервера. Яндекс предъявляет строгие требования к безопасности при программном доступе:

  1. Пароль приложения: Для работы через 1С нельзя использовать основной пароль от почтового ящика (особенно если включена двухфакторная аутентификация). Необходимо создать специальный «Пароль приложения» в настройках безопасности Яндекс ID.
  2. Права доступа: При создании пароля приложения убедитесь, что вы разрешили доступ к почтовому ящику по протоколам IMAP и SMTP. Если разрешить только отправку, метод из первого способа (копирование в папку) работать не будет.
  3. Настройки в веб-интерфейсе: Зайдите в «Все настройки» -> «Почтовые программы» и проверьте, включена ли опция работы по протоколу IMAP. Иногда требуется явно разрешить сохранение копий через SMTP, хотя современные серверы Яндекса часто делают это автоматически, если письмо распознано как легитимное.

Рекомендация по выбору решения

Проанализировав все варианты, мы рекомендуем придерживаться следующей логики:

Если вы пишете расширение или дорабатываете типовую конфигурацию — используйте возможности БСП. Это избавит вас от написания низкоуровневого кода и обеспечит стабильность при обновлениях платформы. Если же вы создаете самописную обработку или внешнюю систему обмена, используйте Способ №1 с протоколом IMAP, так как он обеспечивает наиболее «чистый» результат: письмо оказывается именно там, где его ожидает увидеть пользователь — в папке «Отправленные». Чтобы не реализовывать функционал с нуля, можно применить расширение для отправки и получения почтовых сообщений.

← На главную