Как программно сохранять письма в папке «Отправленные» при отправке из 1С?

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

Многие разработчики при автоматизации рассылки документов, например, актов сверок, сталкиваются с тем, что письма, отправленные через ИнтернетПочта по протоколу SMTP, успешно доходят до адресата, но не отображаются в папке «Отправленные» почтового ящика отправителя. Это усложняет контроль переписки и ведение цепочек писем. Давайте разберемся, как исправить это поведение и обеспечить корректное сохранение копий отправленных писем на сервере.

Понимание работы почтовых протоколов

Для начала важно уяснить фундаментальное различие между протоколами: SMTP отвечает исключительно за передачу сообщения получателю, в то время как IMAP предназначен для управления письмами непосредственно на почтовом сервере (чтение, перемещение, создание папок). Чтобы письмо появилось в папке «Отправленные», нам необходимо не просто отправить его, но и «положить» копию в нужную директорию на сервере с помощью методов IMAP.

Пошаговое решение задачи

Рассмотрим алгоритм действий, который позволит добиться желаемого результата. Основная идея заключается в использовании объекта ИнтернетПочтовыйПрофиль и последовательном вызове методов объекта ИнтернетПочта.

  1. Настройка профиля с данными как для SMTP (отправка), так и для IMAP (работа с папками).
  2. Подключение к почтовому серверу с использованием протокола IMAP.
  3. Явное указание почтового ящика (папки), с которым мы будем работать.
  4. Отправка письма получателю через SMTP.
  5. Копирование (отправка) письма в папку «Отправленные» через IMAP.

Пример реализации кода

Ниже представлен пример кода, который объединяет эти действия в логически завершенную структуру:


ПараметрыПочты = Новый ИнтернетПочтовыйПрофиль;
// Данные SMTP
ПараметрыПочты.АдресСервераSMTP = "smtp.yandex.ru";
ПараметрыПочты.АутентификацияSMTP = СпособSMTPАутентификации.Login;
ПараметрыПочты.ИспользоватьSSLSMTP = Истина;
ПараметрыПочты.ПортSMTP = 465;
ПараметрыПочты.ПользовательSMTP = "ВашЛогин";
ПараметрыПочты.ПарольSMTP = "ВашПароль";

// Данные IMAP
ПараметрыПочты.АдресСервераIMAP = "imap.yandex.ru";
ПараметрыПочты.ИспользоватьSSLIMAP = Истина;
ПараметрыПочты.ПортIMAP = 993;
ПараметрыПочты.ПользовательIMAP = "ВашЛогин";
ПараметрыПочты.ПарольIMAP = "ВашПароль";

// Само письмо
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Тестовое письмо с сохранением";
Письмо.ИмяОтправителя = "ВашеИмя";
Письмо.Отправитель = "ВашАдрес";
Письмо.Получатели.Добавить("АдресПолучателя");
Письмо.Тексты.Добавить("Текст сообщения");

Подключение = Новый ИнтернетПочта;
Попытка
    Подключение.Подключиться(ПараметрыПочты, ПротоколИнтернетПочты.IMAP);
    
    // Важнейший момент: выбор папки. 
    // По умолчанию стоит «Входящие», поэтому меняем на «Отправленные»
    Подключение.ТекущийПочтовыйЯщик = "Отправленные"; 
    
    // Сначала отправляем письмо адресату
    Подключение.Послать(Письмо); 
    
    // Затем сохраняем копию в текущем ящике (Отправленные) через IMAP
    Подключение.Послать(Письмо, , ПротоколИнтернетПочты.IMAP); 
    
    Подключение.Отключиться();
Исключение
    Сообщить("Ошибка при отправке: " + ОписаниеОшибки());
КонецПопытки;

Важные технические нюансы

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

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

← На главную