我有一个Java Spring集成项目,该项目通过以下代码接收电子邮件:
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) {
}
我收到了电子邮件,也知道了主题,但是我实际上无法提取消息正文。我该怎么做呢? 谢谢!
答案 0 :(得分:1)
您必须在通道适配器上使用此选项:
simple-content="true"
查看其描述:
为“ true”时,由源产生的消息将由“ MimeMessage.getContent()”呈现。 通常只是简单文本电子邮件的正文。为假(默认)时,内容 由底层基础返回的实际消息上的“ getContent()”方法呈现 javamail实现。 例如,使用一些消息头来呈现IMAP消息。 提供此属性是为了使用户可以启用以前的行为, 渲染了身体。
但是仍然值得怀疑,因为我发现在发生GMail消息的情况下,这绝非易事。内容是MimeMultipart
,我们需要阅读其内容才能访问真实的身体。
因此,这也是您也应更改代码的方式:
log.info("content" + ((MimeMultipart) ((MimeMessage) message.getPayload()).getContent()).getBodyPart(0).getContent());