Получить содержимое сообщения из сообщения MIME? - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть java весенний проект интеграции, который получает письма по следующему коду:

  ClassPathXmlApplicationContext ac =
        new ClassPathXmlApplicationContext(
            "/integration/gmail-imap-idle-config.xml");
   DirectChannel inputChannel = ac.getBean("receiveChannel", DirectChannel.class);

            inputChannel.subscribe(message -> {
                org.springframework.messaging.Message<MimeMailMessage> received =
                    (org.springframework.messaging.Message<MimeMailMessage>) message;

                log.info("content" + message);

                List<String> sentences = null;
                try {


            } catch (Exception e) {

                }

Я получаю электронное письмо и могу получить тему, но на самом деле я никогда не могу извлечь сообщение тело. Как мне это сделать? Спасибо!

1 Ответ

1 голос
/ 17 апреля 2020

Вы должны использовать эту опцию на канальном адаптере:

simple-content="true"

См. Его описание:

Когда установлено значение «истина», сообщения, созданные источником, будут отображаться «MimeMessage.getContent ()», который обычно является просто телом для простого текстового электронного письма. При значении false (по умолчанию) содержимое отображается методом getContent () для фактического сообщения, возвращаемого базовой реализацией javamail. Например, сообщение IMAP отображается с некоторыми заголовками сообщений. Этот атрибут предоставлен для того, чтобы пользователи могли включить предыдущее поведение, которое только что отображало тело.

Но все же это сомнительно, так как я вижу, что в случае сообщения GMail это никогда не бывает простым. Контент MimeMultipart, и нам нужно прочитать его части, чтобы получить доступ к реальному телу.

Итак, вот как вы должны изменить свой код:

log.info("content" + ((MimeMultipart) ((MimeMessage) message.getPayload()).getContent()).getBodyPart(0).getContent());
...