При переходе с обычных почтовых клиентов на программную отправку почты напрямую из 1С:Предприятие многие разработчики сталкиваются с неприятной особенностью: письма успешно уходят получателям, но совершенно не отображаются в папке «Отправленные» (Sent) в веб-интерфейсе Яндекс.Почты или других клиентах. Это происходит потому, что протокол SMTP, отвечающий за пересылку сообщений, сам по себе не обязан сохранять копию письма в почтовом ящике отправителя — это задача почтового сервера или клиента.
В этой статье мы подробно разберем, как заставить систему сохранять исходящую корреспонденцию, проанализируем различные подходы и выберем наиболее надежный вариант для работы с Яндекс.Почтой.
Разберем самый надежный технический способ. Суть его заключается в том, что после успешной отправки сообщения по протоколу SMTP, мы подключаемся к почтовому ящику по протоколу IMAP и принудительно «кладем» копию этого письма в папку для отправленных сообщений. Рассмотрим пример кода, реализующий этот механизм.
Для начала проанализируем типовой алгоритм работы с объектом ИнтернетПочта:
// 1. Сначала отправляем письмо через SMTP
ИнтернетПочта = Новый ИнтернетПочта;
Попытка
ИнтернетПочта.Подключиться(Профиль, ПротоколИнтернетПочты.SMTP);
ИнтернетПочта.Послать(Письмо);
ИнтернетПочта.Отключиться();
Исключение
Сообщить("Ошибка при отправке: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// 2. Теперь сохраняем его в папку Отправленные через IMAP
Попытка
ИнтернетПочта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP);
// Важно правильно указать имя папки
ИнтернетПочта.ТекущийПочтовыйЯщик = "Sent";
ИнтернетПочта.Послать(Письмо,, ПротоколИнтернетПочты.IMAP);
ИнтернетПочта.Отключиться();
Исключение
// Ошибка сохранения в отправленные не всегда критична для пользователя
ЗаписьЖурналаРегистрации("Почта", УровеньЖурналаРегистрации.Предупреждение,,,
"Письмо отправлено, но не сохранено в Sent: " + ОписаниеОшибки());
КонецПопытки;
Важный нюанс: Имя папки "Sent" является стандартным, но в зависимости от настроек локализации Яндекс.Почты или конкретного аккаунта, папка может называться "Отправленные" или "Sent Messages". Чтобы сделать ваш код универсальным, рекомендуется предварительно получить список доступных папок методом ИнтернетПочта.ПолучитьПапки() и найти нужную по косвенным признакам или сопоставлению имен.
Если вы работаете в современной конфигурации (например, Управление торговлей 11, ERP 2 или Бухгалтерия предприятия 3.0), то, скорее всего, в вашей системе используется Библиотека стандартных подсистем. Проанализируем настройки справочника «Учетные записи электронной почты». При необходимости можно использовать инструмент для получения настроек учетных записей электронной почты.
В типовых решениях уже реализован функционал автоматического сохранения копий. Разберем по шагам, как это проверить:
SMTP, но и по IMAP, так как именно он используется для синхронизации папок.Если этот флаг установлен, 1С при использовании типовых процедур отправки (например, через Взаимодействия или ПочтовыеСообщения.ОтправитьПочту) сама выполнит операции по копированию сообщения в нужную системную директорию.
Выясним причину популярности этого метода и его недостатки. Идея проста: при программном формировании письма в поле СкрытыеКопии (BCC) добавляется адрес самого отправителя.
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Отправитель.Адрес = "my-mail@yandex.ru";
// Добавляем себя в скрытую копию
СкрытыйПолучатель = Письмо.СкрытыеКопии.Добавить();
СкрытыйПолучатель.Адрес = "my-mail@yandex.ru";
Рассмотрим плюсы и минусы такого подхода:
IMAP, что ускоряет работу программы.BCC и является скрытым.Посмотрим на ситуацию со стороны сервера. Яндекс предъявляет строгие требования к безопасности при программном доступе:
IMAP и SMTP. Если разрешить только отправку, метод из первого способа (копирование в папку) работать не будет.Проанализировав все варианты, мы рекомендуем придерживаться следующей логики:
Если вы пишете расширение или дорабатываете типовую конфигурацию — используйте возможности БСП. Это избавит вас от написания низкоуровневого кода и обеспечит стабильность при обновлениях платформы. Если же вы создаете самописную обработку или внешнюю систему обмена, используйте Способ №1 с протоколом IMAP, так как он обеспечивает наиболее «чистый» результат: письмо оказывается именно там, где его ожидает увидеть пользователь — в папке «Отправленные». Чтобы не реализовывать функционал с нуля, можно применить расширение для отправки и получения почтовых сообщений.