При отправке электронных документов, счетов и печатных форм из программ 1С (например, 1С:Управление торговлей) через почтовый ящик сервиса mail.ru пользователи часто сталкиваются с ситуацией, когда адресат успешно получает письмо, но в самом почтовом ящике на сервере в папке «Отправленные» отправленное сообщение отсутствует. Разберем архитектурные причины такого поведения почтовых протоколов и рассмотрим проверенные способы решения этой проблемы.
Для понимания сути проблемы проанализируем разницу в назначении почтовых протоколов:
SMTP не отвечает за размещение копии отправленного письма в каталогах почтового ящика отправителя. На серверах mail.ru отправка через SMTP сама по себе не инициирует сохранение копии в каталоге «Отправленные».SMTP выполняют дополнительное действие — подключаются по протоколу IMAP и записывают отправленное письмо в папку «Отправленные» на сервере с помощью команды APPEND.ИнтернетПочта.Послать() отправляет сообщение по протоколу SMTP, но автоматически не выполняет дозапись в каталоги IMAP, если это отдельно не предусмотрено прикладным кодом конфигурации или настройками почтового клиента в 1С.IMAP системные папки почтового ящика могут иметь специфические имена (например, Sent, Sent Messages или закодированные в Modified UTF-7, такие как &BB4EQgQ,BEAEMA-). Попытка прямой записи в несуществующий строковый путь «Отправленные» часто приводит к системной ошибке.Рассмотрим наиболее надежный и простой способ, не требующий доработки программного кода конфигурации 1С. Метод основан на автоматической отправке скрытой копии письма самому себе с последующей сортировкой на стороне mail.ru.
mybox@mail.ru).Теперь при отправке любого документа из 1С письмо гарантированно попадет в нужную папку почтового ящика через механизм входящей скрытой копии.
Разберем вариант настройки учетной записи через протокол IMAP в типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП):
imap.mail.ru, порт 993, шифрование SSL), а для исходящей почты — SMTP (сервер smtp.mail.ru, порт 465, шифрование SSL).Посмотрим, как реализовать программное сохранение копии отправленного сообщения в нужный каталог сервера по протоколу IMAP средствами встроенного языка 1С. Разберем по шагам логику работы с объектом ИнтернетПочта:
// 1. Создаем объект и настраиваем профиль подключения к серверу
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль.АдресСервераSMTP = "smtp.mail.ru";
ПочтовыйПрофиль.ПортSMTP = 465;
ПочтовыйПрофиль.ИспользоватьSSLSMTP = Истина;
ПочтовыйПрофиль.ПользовательSMTP = "mybox@mail.ru";
ПочтовыйПрофиль.ПарольSMTP = "ПарольПриложения";
ПочтовыйПрофиль.АдресСервераIMAP = "imap.mail.ru";
ПочтовыйПрофиль.ПортIMAP = 993;
ПочтовыйПрофиль.ИспользоватьSSLIMAP = Истина;
ПочтовыйПрофиль.ПользовательIMAP = "mybox@mail.ru";
ПочтовыйПрофиль.ПарольIMAP = "ПарольПриложения";
Почта = Новый ИнтернетПочта;
Попытка
// 2. Подключаемся к почтовому серверу
Почта.Подключиться(ПочтовыйПрофиль, ПротоколИнтернетПочты.IMAP);
// 3. Отправляем письмо получателю по протоколу SMTP
Почта.Послать(Письмо, , ПротоколИнтернетПочты.SMTP);
// 4. Получаем структуру каталогов почтового ящика для определения точного пути
ТаблицаКаталогов = Почта.ПолучитьТаблицуКаталогов();
// 5. Устанавливаем целевой почтовый ящик (каталог на сервере)
// Системное имя папки может быть "Sent" или пользовательским, например "Отправлено из 1С"
Почта.ТекущийПочтовыйЯщик = "Sent";
// 6. Сохраняем копию письма в выбранный каталог через IMAP
Почта.Послать(Письмо, , ПротоколИнтернетПочты.IMAP);
Почта.Отключиться();
Исключение
Почта.Отключиться();
ВызватьИсключение ОписаниеОшибки();
КонецПопытки;
Важные замечания при реализации:
ПолучитьТаблицуКаталогов() позволяет динамически проверить реальные имена папок на сервере, избегая ошибок несуществующих каталогов при русскоязычных названиях.Почта.Послать() с третьим параметром ПротоколИнтернетПочты.IMAP выполняет запись сообщения в установленный ТекущийПочтовыйЯщик без повторной физической пересылки адресату.