При работе с электронной почтой в старых редакциях конфигураций, таких как 1С:Управление торговлей 10.3 или Комплексная автоматизация 1.1, пользователи часто сталкиваются с проблемой: письма успешно уходят клиентам, но их невозможно найти ни в самой базе 1С, ни в папке «Отправленные» в веб-интерфейсе почтового сервиса (Yandex, Gmail, Mail.ru). Это происходит из-за особенностей протокола SMTP и отсутствия автоматического создания документов в базе при программной отправке.
В этой статье мы подробно разберем, как решить эту задачу двумя путями: программным созданием документа в 1С и правильной настройкой синхронизации с почтовым сервером.
Для начала проанализируем ситуацию с технической стороны. Протокол SMTP (Simple Mail Transfer Protocol) предназначен исключительно для передачи сообщения на сервер. Он не дает команд серверу сохранять копию письма в какой-либо папке. Многие современные сервисы (например, Gmail) делают это автоматически, распознавая авторизованного пользователя, но Yandex и Mail.ru часто требуют использования протокола IMAP для синхронизации папок или специальных настроек в личном кабинете.
Если же мы хотим видеть историю переписки непосредственно в 1С, нам необходимо задействовать внутренний объект конфигурации — документ ЭлектронноеПисьмо.
Чтобы письмо сохранялось в базе 1С, недостаточно просто вызвать метод ИнтернетПочта.Отправить(). Нам нужно создать экземпляр документа ЭлектронноеПисьмо, заполнить его реквизиты и установить соответствующий статус. Рассмотрим пример кода, который позволяет сформировать письмо и привязать его к учетной записи пользователя.
Для реализации этого метода мы будем использовать типовые механизмы общего модуля УправлениеЭлектроннойПочтой. Разберем по шагам создание процедуры отправки:
Процедура КИ_ОтправитьПисьмоИСохранить(Данные)
// 1. Подготовка структуры нового письма
СтруктураНовогоПисьма = Новый Структура;
СтруктураНовогоПисьма.Вставить("ВидТекста", Перечисления.ВидыТекстовЭлектронныхПисем.Текст);
ТекстПисьма = Новый ТекстовыйДокумент;
ТекстПисьма.ДобавитьСтроку("Данное письмо сформировано автоматически из 1С.");
ТекстПисьма.ДобавитьСтроку("Информация: " + Данные.Комментарий);
СтруктураНовогоПисьма.Вставить("Тело", ТекстПисьма.ПолучитьТекст());
СтруктураНовогоПисьма.Вставить("Тема", "Тестовое письмо из 1С");
// 2. Указываем получателей
СписокПолучателей = Новый СписокЗначений;
СписокПолучателей.Добавить("client@example.com");
СтруктураНовогоПисьма.Вставить("Кому", СписокПолучателей);
// 3. Используем типовую функцию для создания объекта письма в базе
ТекПользователь = ПараметрыСеанса.ТекущийПользователь;
СтруктураСозданногоПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(ТекПользователь, СтруктураНовогоПисьма, , , , , , Истина, Ложь);
Если ТипЗнч(СтруктураСозданногоПисьма) = Тип("Структура") Тогда
СсылкаНаПисьмо = Неопределено;
СтруктураСозданногоПисьма.Sвойство("ПисьмоСсылка", СсылкаНаПисьмо);
// 4. Устанавливаем статус "Исходящее" и записываем объект
ПисьмоОбъект = СсылкаНаПисьмо.ПолучитьОбъект();
ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыПисем.Исходящее;
ПисьмоОбъект.Ответственный = ТекПользователь;
Попытка
ПисьмоОбъект.Записать();
Исключение
Сообщить("Ошибка сохранения: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// 5. Отправка письма с сервера
УчетныеЗаписи = Новый Массив;
УчетныеЗаписи.Добавить(ПисьмоОбъект.УчетнаяЗапись);
ПисьмаДляОтправки = Новый Соответствие;
ПисьмаДляОтправки.Вставить(ПисьмоОбъект.Ссылка, ПисьмоОбъект);
ТекстОшибок = "";
УправлениеЭлектроннойПочтой.ПолучениеОтправкаПисем(
глЗначениеПеременной("глСоответствиеТекстовЭлектронныхПисем"),
ТекПользователь,
УчетныеЗаписи,
ПисьмаДляОтправки,
Истина, , Ложь, ТекстОшибок);
Если ПустаяСтрока(ТекстОшибок) Тогда
ЗаписьЖурналаРегистрации("Отправка почты", УровеньЖурналаРегистрации.Информация, , , "Письмо успешно отправлено и сохранено");
Иначе
Сообщить("Ошибка при отправке: " + ТекстОшибок);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В данном примере мы используем функцию УправлениеЭлектроннойПочтой.НаписатьПисьмо, которая автоматически создает документ ЭлектронноеПисьмо в базе. Установка статуса Перечисления.СтатусыПисем.Исходящее важна для того, чтобы письмо попало в очередь на отправку и корректно отображалось в списках документов.
Если ваша задача — видеть письма именно в почтовом ящике (например, в Яндекс.Почте), проверьте настройки учетной записи в 1С. В типовой УТ 10.3 при настройке учетной записи необходимо выбрать протокол IMAP вместо POP3 для входящей почты.
Рассмотрим важные нюансы настройки для популярных сервисов:
Sent, а программа ищет Отправленные. Убедитесь, что в настройках учетной записи 1С правильно указаны соответствия папок (если ваша версия конфигурации это поддерживает).Это надежное «обходное» решение, если программный код конфигурации менять нельзя, а сервер упорно не сохраняет письма в отправленных. Выясним причину: сервер считает письмо внешним и просто пересылает его. Чтобы копия осталась у вас, можно принудительно добавить свой же адрес в скрытую копию.
Алгоритм действий следующий:
ИнтернетПочтовоеСообщение.СкрытыеПолучатели (BCC) добавьте адрес почты, с которой ведется отправка.Это гарантирует, что история переписки сохранится на сервере, даже если используется самый простой протокол SMTP без поддержки синхронизации.
Выбор метода зависит от ваших целей. Если важно видеть письма внутри 1С — используйте программное создание документа ЭлектронноеПисьмо с помощью типовых процедур. Если же основной приоритет — синхронизация с внешним почтовым клиентом, сфокусируйтесь на настройке протокола IMAP и разрешений на стороне почтового провайдера. Комбинация этих методов обеспечит наиболее полный контроль над исходящей корреспонденцией в вашей системе.