Обработка 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"
Секции
meta— метаданные маршрутаroute— основная логика маршрута
Последовательность выполнения
Поток последовательно выполняет шаги:
- Формируется email с заданными заголовками
- Добавляются вложения из HTTP‑запроса
- Устанавливается текст письма
- Сообщение отправляется через 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"
Секции
meta— метаданные маршрутаroute— основная логика обработки почты
Последовательность выполнения
В вышеприведенном примере:
- Каждые 10 секунд происходит подключение к IMAP‑серверу
- Берутся только непрочитанные письма.
- Для каждого письма:
- записываются в лог отправитель и тема
- записывается в лог текстовая часть письма
- если есть вложения — письмо разбивается на части (каждое вложение — отдельное сообщение)
- для каждого вложения:
- конвертирует его в строку
- записывает содержимое в лог.
- Письма остаются на сервере (не удаляются).
Особенности
- Неагрессивная обработка: письма не удаляются, что позволяет перепроверить данные.
- Фокус на новых письмах: обрабатываются только непрочитанные письма.
- Детальное логирование: фиксируются все части письма — заголовки, текст, вложения.
- Гибкость: использование
SplitAttachmentsExpressionпозволяет легко адаптировать логику под другие задачи (сохранение файлов, отправку в очередь и т. д.).