База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибку «Каталог не обнаружен» при отправке HTML-письма?
- В этой теме 1 ответ, 2 участника, последнее обновление 10 часов, 26 минут назад сделано
Odin — Одинэсник.
-
АвторЗаписи
-
-
9 октября 2026 в 12:18 #38835
при отправки письма в формате html Ошибка при вызове метода контекста (Послать): Каталог не обнаружен
-
9 октября 2026 в 12:18 #38836
Ошибка:
1С (Код)1Ошибка при вызове метода контекста (Послать): Каталог не обнаруженпри отправке HTML-письма обычно означает, что в письме есть ссылка на файл или вложение, а каталог с этим файлом недоступен на компьютере, где выполняется метод
Почта.Послать().Чаще всего причина находится в одном из трех мест:
1. в HTML указаны картинки через локальный путь;
2. в письмо добавляется вложение по несуществующему пути;
3. код выполняется на сервере, а файл находится на компьютере пользователя.## 1. Проверьте HTML
Неправильно:
XHTML1<img src="C:Templogo.png">или:
XHTML1<img src="file:///C:/Temp/logo.png">Также проблемными будут пути вида:
XHTML1<img src="D:Общие документыlogo.jpg">Когда письмо отправляется, почтовый объект пытается обработать этот путь. Если каталог
C:Temp,D:Общие документыили другой путь отсутствует на компьютере сервера, возникает ошибка «Каталог не обнаружен».Для HTML-письма картинку нужно либо:
— добавить как встроенное вложение с
Content-ID;
— вставить в HTML в формате Base64;
— убрать картинку из HTML;
— разместить картинку на доступном веб-сервере и указать URLhttps://....Пример с внешней ссылкой:
XHTML1<img src="https://example.ru/images/logo.png">Но такая картинка может не отображаться у получателя, если почтовая программа блокирует внешнее содержимое.
## 2. Проверьте добавление обычных вложений
Если используется код вроде:
1С (Код)1Вложение = ПочтовоеСообщение.Вложения.Добавить(ПутьКФайлу);или:
1С (Код)1Вложение = Сообщение.Вложения.Добавить(Новый Файл(ПутьКФайлу));нужно проверить, что файл существует именно там, где выполняется отправка.
Надежная проверка:
1С (Код)12345ФайлВложения = Новый Файл(ПутьКФайлу);Если Не ФайлВложения.Существует() ТогдаВызватьИсключение "Файл вложения не найден: " + ПутьКФайлу;КонецЕсли;Для добавления файла лучше использовать двоичные данные:
1С (Код)12345678910ФайлВложения = Новый Файл(ПутьКФайлу);Если Не ФайлВложения.Существует() ТогдаВызватьИсключение "Файл вложения не найден: " + ПутьКФайлу;КонецЕсли;ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлу);Вложение = ПочтовоеСообщение.Вложения.Добавить(ДвоичныеДанныеФайла);Вложение.Имя = ФайлВложения.Имя;Важно: файл не должен быть только на компьютере пользователя, если отправка выполняется на сервере.
## 3. Проверьте серверный и клиентский путь
Например, пользователь выбирает файл:
1С (Код)1C:UsersИвановDocumentsДокумент.pdfНо
Почта.Послать()выполняется на сервере 1С. На сервере такого каталога может не быть. Для сервера путь:1С (Код)1C:UsersИвановDocumentsДокумент.pdfне означает путь к компьютеру пользователя.
В таком случае файл нужно сначала передать на сервер в виде
ДвоичныеДанные, а уже на сервере добавить его в письмо.Пример общей схемы:
1С (Код)1234567891011121314151617181920&НаКлиентеПроцедура ОтправитьПисьмо(Команда)Если Не ЗначениеЗаполнено(ПутьКФайлу) ТогдаСообщить("Не выбран файл.");Возврат;КонецЕсли;Файл = Новый Файл(ПутьКФайлу);Если Не Файл.Существует() ТогдаСообщить("Файл не найден: " + ПутьКФайлу);Возврат;КонецЕсли;ДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлу);ОтправитьПисьмоНаСервере(ДанныеФайла, Файл.Имя);КонецПроцедурыСерверная процедура:
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445&НаСервереПроцедура ОтправитьПисьмоНаСервере(ДанныеФайла, ИмяФайла)Профиль = Новый ИнтернетПочтовыйПрофиль;Профиль.АдресСервераSMTP = "smtp.example.ru";Профиль.ПортSMTP = 465;Профиль.ПользовательSMTP = "user@example.ru";Профиль.ПарольSMTP = "Пароль";Профиль.ИспользоватьSSLSMTP = Истина;Сообщение = Новый ИнтернетПочтовоеСообщение;Сообщение.Тема = "Проверка отправки";Сообщение.Отправитель = "user@example.ru";Сообщение.Получатели.Добавить("recipient@example.ru");ТекстHTML ="<html>" +"<body>" +"<p>Тестовое письмо.</p>" +"</body>" +"</html>";Сообщение.Тексты.Добавить(ТекстHTML,ТипТекстаПочтовогоСообщения.HTML);Вложение = Сообщение.Вложения.Добавить(ДанныеФайла);Вложение.Имя = ИмяФайла;Сообщение.ОбработатьТексты();Почта = Новый ИнтернетПочта;ПопыткаПочта.Подключиться(Профиль);Почта.Послать(Сообщение);ИсключениеТекстОшибки = ОписаниеОшибки();ВызватьИсключение "Ошибка отправки письма: " + ТекстОшибки;КонецПопытки;Почта.Отключиться();КонецПроцедуры## 4. Если в HTML есть картинки, добавляйте их через CID
HTML:
XHTML123456<html><body><p>Добрый день!</p><img src="cid:logo.png"></body></html>Картинку нужно добавить во вложения и назначить ей идентификатор:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546&НаСервереПроцедура ОтправитьHTMLСКартинкойНаСервере(ДанныеЛоготипа)Профиль = Новый ИнтернетПочтовыйПрофиль;Профиль.АдресСервераSMTP = "smtp.example.ru";Профиль.ПортSMTP = 465;Профиль.ПользовательSMTP = "user@example.ru";Профиль.ПарольSMTP = "Пароль";Профиль.ИспользоватьSSLSMTP = Истина;Сообщение = Новый ИнтернетПочтовоеСообщение;Сообщение.Тема = "Письмо с логотипом";Сообщение.Отправитель = "user@example.ru";Сообщение.Получатели.Добавить("recipient@example.ru");HTML ="<html>" +"<body>" +"<p>Добрый день!</p>" +"<img src=""cid:logo.png"">" +"</body>" +"</html>";Вложение = Сообщение.Вложения.Добавить(ДанныеЛоготипа);Вложение.Имя = "logo.png";Вложение.Идентификатор = "logo.png";Сообщение.Тексты.Добавить(HTML,ТипТекстаПочтовогоСообщения.HTML);Сообщение.ОбработатьТексты();Почта = Новый ИнтернетПочта;ПопыткаПочта.Подключиться(Профиль);Почта.Послать(Сообщение);ИсключениеВызватьИсключение ОписаниеОшибки();КонецПопытки;Почта.Отключиться();КонецПроцедурыЕсли картинки формируются объектом
ФорматированныйДокумент, можно получить HTML и картинки черезПолучитьHTML(), а затем заменить ссылки на картинки наcid::1С (Код)12345678910111213141516171819202122232425HTML = "";Картинки = Новый Соответствие;Содержимое.ПолучитьHTML(HTML, Картинки);Для Каждого ЭлементКартинки Из Картинки ЦиклДанныеКартинки = ЭлементКартинки.Значение.ПолучитьДвоичныеДанные();Вложение = Сообщение.Вложения.Добавить(ДанныеКартинки);Вложение.Идентификатор = ЭлементКартинки.Ключ;Вложение.Имя = ЭлементКартинки.Ключ;HTML = СтрЗаменить(HTML,ЭлементКартинки.Ключ,"cid:" + Вложение.Идентификатор);КонецЦикла;Сообщение.Тексты.Добавить(HTML,ТипТекстаПочтовогоСообщения.HTML);## 5. Проверьте временные файлы
Иногда HTML сначала записывается во временный каталог:
1С (Код)1ИмяВременногоФайла = ПолучитьИмяВременногоФайла("html");А потом каталог удаляется до выполнения:
1С (Код)1Почта.Послать(Сообщение);Например, проблемный вариант:
1С (Код)12345678ИмяФайла = ПолучитьИмяВременногоФайла("html");ЗаписатьТекстовыйФайл(ИмяФайла, HTML);// Здесь временный файл удалилиУдалитьФайлы(ИмяФайла);// А здесь почта пытается его прочитатьПочта.Послать(Сообщение);Если файл используется в письме, он должен существовать до завершения
Послать().Проверяйте временный путь:
1С (Код)12345Файл = Новый Файл(ИмяФайла);Сообщить("Путь: " + ИмяФайла);Сообщить("Существует: " + Файл.Существует());Сообщить("Каталог: " + Файл.Путь);Если файл создается на сервере, временный каталог должен существовать именно на сервере 1С.
## 6. Быстрая диагностика
Временно отправьте письмо без HTML-картинок и вложений:
1С (Код)123456789101112131415Сообщение = Новый ИнтернетПочтовоеСообщение;Сообщение.Тема = "Тест";Сообщение.Отправитель = "user@example.ru";Сообщение.Получатели.Добавить("recipient@example.ru");Сообщение.Тексты.Добавить("Простое текстовое письмо",ТипТекстаПочтовогоСообщения.ПростойТекст);Сообщение.ОбработатьТексты();Почта.Подключиться(Профиль);Почта.Послать(Сообщение);Почта.Отключиться();Если простое письмо отправляется, добавляйте элементы по одному:
1. простой текст;
2. HTML без картинок;
3. HTML с одной картинкой;
4. обычное вложение;
5. остальные картинки и файлы.Так будет сразу понятно, какой путь вызывает ошибку.
## На что обратить внимание в вашем коде
Перед строкой:
1С (Код)1Почта.Послать(Сообщение);проверьте:
— нет ли в HTML
src="C:...";
— нет ли в HTMLfile:///...;
— существуют ли все файлы вложений;
— выполняется ли код на клиенте или сервере;
— доступен ли каталог серверу 1С;
— не удаляется ли временный файл раньше времени;
— не содержит ли имя файла недопустимые символы;
— вызывается лиСообщение.ОбработатьТексты()после добавления текста и вложений.В большинстве случаев при HTML-письме ошибка устраняется удалением локальных
srcиз HTML или заменой их на CID-вложения. Если отправка выполняется на сервере, локальные пути компьютера пользователя нужно передавать на сервер какДвоичныеДанные, а не передавать строку с путем.
-
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.