Как исправить ошибку «Каталог не обнаружен» при отправке HTML-письма?

База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибку «Каталог не обнаружен» при отправке HTML-письма?

Просмотр 1 ветки ответов
  • Автор
    Записи
    • #38835
      Фото аватараOdineski
      Участник

        при отправки письма в формате html Ошибка при вызове метода контекста (Послать): Каталог не обнаружен

      • #38836
        bot_avaOdin — Одинэсник
        Участник

          Ошибка:

          при отправке HTML-письма обычно означает, что в письме есть ссылка на файл или вложение, а каталог с этим файлом недоступен на компьютере, где выполняется метод Почта.Послать().

          Чаще всего причина находится в одном из трех мест:

          1. в HTML указаны картинки через локальный путь;
          2. в письмо добавляется вложение по несуществующему пути;
          3. код выполняется на сервере, а файл находится на компьютере пользователя.

          ## 1. Проверьте HTML

          Неправильно:

          или:

          Также проблемными будут пути вида:

          Когда письмо отправляется, почтовый объект пытается обработать этот путь. Если каталог C:Temp, D:Общие документы или другой путь отсутствует на компьютере сервера, возникает ошибка «Каталог не обнаружен».

          Для HTML-письма картинку нужно либо:

          — добавить как встроенное вложение с Content-ID;
          — вставить в HTML в формате Base64;
          — убрать картинку из HTML;
          — разместить картинку на доступном веб-сервере и указать URL https://....

          Пример с внешней ссылкой:

          Но такая картинка может не отображаться у получателя, если почтовая программа блокирует внешнее содержимое.

          ## 2. Проверьте добавление обычных вложений

          Если используется код вроде:

          или:

          нужно проверить, что файл существует именно там, где выполняется отправка.

          Надежная проверка:

          Для добавления файла лучше использовать двоичные данные:

          Важно: файл не должен быть только на компьютере пользователя, если отправка выполняется на сервере.

          ## 3. Проверьте серверный и клиентский путь

          Например, пользователь выбирает файл:

          Но Почта.Послать() выполняется на сервере 1С. На сервере такого каталога может не быть. Для сервера путь:

          не означает путь к компьютеру пользователя.

          В таком случае файл нужно сначала передать на сервер в виде ДвоичныеДанные, а уже на сервере добавить его в письмо.

          Пример общей схемы:

          Серверная процедура:

          ## 4. Если в HTML есть картинки, добавляйте их через CID

          HTML:

          Картинку нужно добавить во вложения и назначить ей идентификатор:

          Если картинки формируются объектом ФорматированныйДокумент, можно получить HTML и картинки через ПолучитьHTML(), а затем заменить ссылки на картинки на cid::

          ## 5. Проверьте временные файлы

          Иногда HTML сначала записывается во временный каталог:

          А потом каталог удаляется до выполнения:

          Например, проблемный вариант:

          Если файл используется в письме, он должен существовать до завершения Послать().

          Проверяйте временный путь:

          Если файл создается на сервере, временный каталог должен существовать именно на сервере 1С.

          ## 6. Быстрая диагностика

          Временно отправьте письмо без HTML-картинок и вложений:

          Если простое письмо отправляется, добавляйте элементы по одному:

          1. простой текст;
          2. HTML без картинок;
          3. HTML с одной картинкой;
          4. обычное вложение;
          5. остальные картинки и файлы.

          Так будет сразу понятно, какой путь вызывает ошибку.

          ## На что обратить внимание в вашем коде

          Перед строкой:

          проверьте:

          — нет ли в HTML src="C:...";
          — нет ли в HTML file:///...;
          — существуют ли все файлы вложений;
          — выполняется ли код на клиенте или сервере;
          — доступен ли каталог серверу 1С;
          — не удаляется ли временный файл раньше времени;
          — не содержит ли имя файла недопустимые символы;
          — вызывается ли Сообщение.ОбработатьТексты() после добавления текста и вложений.

          В большинстве случаев при HTML-письме ошибка устраняется удалением локальных src из HTML или заменой их на CID-вложения. Если отправка выполняется на сервере, локальные пути компьютера пользователя нужно передавать на сервер как ДвоичныеДанные, а не передавать строку с путем.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С