При организации отправки почты из типовых конфигураций, таких как 1С:Управление нашей фирмой (УНФ), пользователи часто сталкиваются с ситуацией: письмо успешно доставлено получателю, однако в веб-интерфейсе почтового сервиса (например, Яндекс Почты) в папке «Отправленные» исходящее сообщение отсутствует. Разберем технические особенности работы почтовых протоколов в платформе 1С:Предприятие, выясним причины такого поведения и рассмотрим способы решения задачи.
Проанализируем базовый принцип работы электронной почты. Классический протокол отправки сообщений SMTP не предусматривает автоматического сохранения отправленных писем в ящике на сервере. При работе через почтовые клиенты сохранение копии — это отдельная операция, выполняемая по протоколу IMAP (команда APPEND).
В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП), включая УНФ, процесс отправки разделен на два шага:
Соединение.Послать(Письмо, ОбрабатыватьТексты, ПротоколИнтернетПочты.IMAP);
Обратим внимание: вызов метода Послать с параметром ПротоколИнтернетПочты.IMAP не выполняет отправку адресату, а лишь записывает письмо в папку сервера, указанную в свойстве Соединение.ТекущийПочтовыйЯщик.
Выделим ключевые причины сбоя при сохранении писем:
&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-). Если 1С передает команду сохранения в папку Sent, а почтовый сервер ожидает кириллическое имя «Отправленные», письмо либо попадает в скрытую пользовательскую папку, либо не сохраняется вовсе.Попытка ... Исключение. Если сервер отклоняет операцию (неверный ящик, отсутствие прав, разрыв связи), ошибка подавляется: адресат письмо получает, но в отправленных оно не появляется.Рассмотрим типовую процедуру определения папки для отправленных писем в общем модуле РаботаСПочтовымиСообщениямиСлужебный:
Процедура ОпределитьПапкуОтправленные(Соединение)
ПочтовыеЯщики = Соединение.ПолучитьПочтовыеЯщики();
Для Каждого ПочтовыйЯщик Из ПочтовыеЯщики Цикл
Если НРег(ПочтовыйЯщик) = "отправленные"
Или НРег(ПочтовыйЯщик) = "inbox.sent"
Или НРег(ПочтовыйЯщик) = "sent"
Или НРег(ПочтовыйЯщик) = "sentbox"
Или НРег(ПочтовыйЯщик) = "sent items" Тогда
Соединение.ТекущийПочтовыйЯщик = ПочтовыйЯщик;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Разберем по шагам, как локализовать проблему с выбором папки:
Соединение.ПолучитьПочтовыеЯщики().Соединение.ТекущийПочтовыйЯщик. При присвоении значения свойству платформа инициирует команду выбора папки на сервере (команда SELECT). Если сервер возвращает ошибку или связь разрывается по таймауту (свойство ВремяОжидания), операция сохранения прерывается.Sent, переопределим сопоставление через расширение конфигурации, явно установив нужное локализованное наименование:
Соединение.ТекущийПочтовыйЯщик = "Отправленные";
Если доступ к IMAP ограничен, возникают ошибки авторизации или нет возможности вносить изменения в конфигурацию, применим альтернативное и надежное решение:
Письмо.СкрытыеПолучатели.Добавить(УчетнаяЗапись.АдресЭлектроннойПочты);
Такой подход полностью снимает зависимость от протокола IMAP и гарантирует наличие всех отправленных писем в интерфейсе почтового клиента.
В конфигурации 1С:УНФ предусмотрена подсистема взаимодействий. Если включить использование встроенной почты, каждое исходящее письмо регистрируется в информационной базе как документ Исходящее электронное письмо. В этом случае вся история переписки, текст и файлы вложений хранятся непосредственно в базе данных 1С и привязываются к карточкам контрагентов и документам расчетов, устраняя необходимость регулярной сверки с веб-интерфейсом почтового сервиса.