Как избежать загрузки содержимого электронной почты с помощью Spring интеграции почты - PullRequest
0 голосов
/ 04 августа 2020

Я использую почту весенней интеграции (версия 5.3.1). У меня есть поток:

    IntegrationFlows
    .from(Mail
        .imapIdleAdapter(imapAdapter)
    )
    .filter()
    .filter()
    ...
    .filter()
    .handle(service1)
    .get();

Я хочу, чтобы содержимое электронной почты загружалось в service1. Я не хочу загружать содержимое электронного письма, пока оно не пройдет все фильтры. Моим фильтрам нужно знать только заголовки электронной почты.

Я пытался использовать DefaultMailHeaderMapper, но содержимое электронной почты все равно загружается. Я могу видеть это в журналах, используя «mail.debug» = true.

Я выполнял отладку, и, согласно источнику AbstractMailReceiver # receive, содержимое MimeMessage будет всегда загружаться, потому что, например, new IntegrationMimeMessage () использует MimeMessage (сообщение MimeMessage ), который загружает контент.

Есть ли способ настроить почтовый адаптер, чтобы он не загружал содержимое электронного письма?

Спасибо!

1 Ответ

2 голосов
/ 04 августа 2020

См. Документы: https://docs.spring.io/spring-integration/docs/current/reference/html/mail.html#mail -inbound . Особенно эта часть:

начиная с версии 5.2, опция autoCloseFolder предусмотрена для получателя почты. Установка для него значения false не закрывает папку автоматически после выборки, но вместо этого заголовок IntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCE (дополнительную информацию см. В API MessageHeaderAccessor) заполняется в каждое сообщение для производителя из адаптера канала.

А затем загляните в следующий раздел: https://docs.spring.io/spring-integration/docs/current/reference/html/mail.html#mail -mapping

Итак, чтобы избежать быстрой загрузки контента, вам следует отказаться от средства отображения заголовков и не закрывать папку автоматически. Таким образом, весь MimeMessage отправляется как полезная нагрузка. Вероятно, вы не сможете выполнить логику фильтрации c по заголовкам, потому что содержимое сообщения не извлекается, поэтому мы не знаем, какие заголовки находятся в MimeMessage. Однако вы можете попытаться получить к ним доступ из ваших фильтров, но уже против полезной нагрузки, а не заголовков.

...