Перейти к основному содержимому
Руководство администратора
How To статьи
Установка и настройка
Компоненты
Руководство пользователя
Начало работы

Обработка Email с вложениями

Отправка Email сообщения с вложениями

В итеграционных потоках Email вложения отправляются через Rest запрос с multipart/form-data. При отсутствии тела письма в потоке, тело будет заполнено контентом из вложений.
ESB поддерживает отправку 0 - N вложений.

Пример маршрута отправки сообщения с несколькими вложениями

Ниже приведен пример потока отправки email с вложениями через SMTP.

configurationItems:
- resourceGroupId: 1
meta:
routeId: "37"
routeVersion: 1
routeVersionId: 381f1797-ab42-40b0-a15f-0b8e7987fb71
domainId: 1
url: /routes/send-file
route: |
- route:
id: "37"
from:
id: "37"
uri: platform-http
parameters:
path: /routes/send-file
cookiePath: /
cookieSecure: false
useStreaming: false
muteException: true
cookieHttpOnly: false
cookieSameSite: Lax
matchOnUriPrefix: false
useCookieHandler: false
bridgeErrorHandler: false
handleWriteResponseError: false
returnHttpRequestHeaders: false
steps:
- setHeader:
name: "To"
simple: "test@bercut.com"
- setHeader:
name: "From"
simple: "nastya@bercut.com"
- setHeader:
name: "Subject"
simple: "Test mail with attachment"
- setBody:
simple: "Это текст письма. Вложение находится в отдельном файле." # при отсутствии поля текст письма заполняется текстом из attachment (-ов)
- setHeader:
name: "CamelMailAttachments" # Специальный заголовок Camel для вложений, который ожидает Camel Mail компонент
simple: "${attachments}" # Передача карты вложений из HTTP запроса
- setHeader:
name: "Content-Type"
simple: "text/plain" # Указывает, что тело письма - простой текст
- to:
uri: "smtp://192.168.105.12:1025"

Секции

  1. meta — метаданные маршрута
  2. route — основная логика маршрута

Последовательность выполнения

Поток последовательно выполняет шаги:

  1. Формируется email с заданными заголовками
  2. Добавляются вложения из HTTP‑запроса
  3. Устанавливается текст письма
  4. Сообщение отправляется через SMTP‑сервер.

Особенности

  • Интеграция HTTP и SMTP: преобразует HTTP‑запросы в email.
  • Динамические вложения: вложения передаются через переменную ${attachments} из HTTP‑запроса.
  • Гибкая настройка: параметры HTTP и email можно менять без изменения кода.
  • Обработка ошибок: параметры, такие как muteException: true, позволяют подавлять исключения на уровне HTTP.

Получение email сообщения с вложениями

Для получения email с вложениями используется встроенный класс обработки почтовых вложений SplitAttachmentsExpression.

Все вложения в MIME-сообщении автоматически находятся и для каждого вложения создается отдельный Exchange. В каждом новом сообщении body содержит содержимое вложения, а заголовки - метаданные файла.

Пример маршрута получения письма с вложениями, разбор вложений как файлов

Ниже приведен пример потока получения письма с вложениями с разбором вложений как файлов.

configurationItems:
- resourceGroupId: 1
meta:
routeId: "38"
routeVersion: 1
routeVersionId: a1b2c3d4-e5f6-7890-abcd-ef1234567890
domainId: 1
route: |
- route:
id: "38"
from:
uri: "imap://localhost:3143"
parameters:
username: "test@bercut.com"
password: "test@bercut.com"
unseen: true # только непрочитанные
delete: false # не удалять
delay: 10000 # проверять каждые 10сек
steps:
- log:
message: "Получено письмо от: ${header.From}, тема: ${header.Subject}"
loggingLevel: "INFO"

- log:
message: "Текстовая часть: ${body}"
loggingLevel: "INFO"

# Разделяет письмо с несколькими вложениями на отдельные сообщения
- split:
method:
beanType: "org.apache.camel.component.mail.SplitAttachmentsExpression" # встроенный класс Camel для обработки почтовых вложений
steps:
- convertBodyTo:
type: "java.lang.String" # конвертация сообщения в строку
- log:
message: "Содержимое вложения: ${body}"
loggingLevel: "INFO"

Секции

  1. meta — метаданные маршрута
  2. route — основная логика обработки почты

Последовательность выполнения

В вышеприведенном примере:

  1. Каждые 10 секунд происходит подключение к IMAP‑серверу
  2. Берутся только непрочитанные письма.
  3. Для каждого письма:
    • записываются в лог отправитель и тема
    • записывается в лог текстовая часть письма
    • если есть вложения — письмо разбивается на части (каждое вложение — отдельное сообщение)
    • для каждого вложения:
      • конвертирует его в строку
      • записывает содержимое в лог.
  4. Письма остаются на сервере (не удаляются).

Особенности

  • Неагрессивная обработка: письма не удаляются, что позволяет перепроверить данные.
  • Фокус на новых письмах: обрабатываются только непрочитанные письма.
  • Детальное логирование: фиксируются все части письма — заголовки, текст, вложения.
  • Гибкость: использование SplitAttachmentsExpression позволяет легко адаптировать логику под другие задачи (сохранение файлов, отправку в очередь и т. д.).