Многие разработчики при автоматизации рассылки документов, например, актов сверок, сталкиваются с тем, что письма, отправленные через ИнтернетПочта по протоколу SMTP, успешно доходят до адресата, но не отображаются в папке «Отправленные» почтового ящика отправителя. Это усложняет контроль переписки и ведение цепочек писем. Давайте разберемся, как исправить это поведение и обеспечить корректное сохранение копий отправленных писем на сервере.
Для начала важно уяснить фундаментальное различие между протоколами: SMTP отвечает исключительно за передачу сообщения получателю, в то время как IMAP предназначен для управления письмами непосредственно на почтовом сервере (чтение, перемещение, создание папок). Чтобы письмо появилось в папке «Отправленные», нам необходимо не просто отправить его, но и «положить» копию в нужную директорию на сервере с помощью методов IMAP.
Рассмотрим алгоритм действий, который позволит добиться желаемого результата. Основная идея заключается в использовании объекта ИнтернетПочтовыйПрофиль и последовательном вызове методов объекта ИнтернетПочта.
SMTP (отправка), так и для IMAP (работа с папками).IMAP.SMTP.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);
Подключение.Отключиться();
Исключение
Сообщить("Ошибка при отправке: " + ОписаниеОшибки());
КонецПопытки;
При работе с этим решением обратите внимание на следующие моменты, которые могут вызвать затруднения:
Sent.Послать(). Первый вызов без указания протокола использует SMTP для доставки письма адресату. Второй вызов с указанием ПротоколИнтернетПочты.IMAP фактически «закидывает» письмо в выбранную нами папку на сервере.Таким образом, мы добились желаемого результата: письмо уходит получателю, а в вашем почтовом ящике остается его копия, что позволяет удобно отслеживать историю переписки прямо из интерфейса веб-почты или почтового клиента.