【问题标题】:how to correctly get inbound message headers with spring integration如何使用 Spring 集成正确获取入站消息标头
【发布时间】:2016-07-18 19:44:22
【问题描述】:

我收到了 Spring 的电子邮件,到目前为止,我的脚本非常基本

ApplicationContext ac = new ClassPathXmlApplicationContext("imap.xml");
DirectChannel inputChannel = ac.getBean("receiveChannel", DirectChannel.class);
inputChannel.subscribe(message -> {
    System.out.println(message.getHeaders());
    System.out.println(message.getPayload());

    MessageHeaders headers = message.getHeaders();
    String from = (String) headers.get("mail_from");
});

根据documentation,我认为标题会自动解析,但我第一个System.out.println();得到的标题只是

{id=c65f55aa-c611-71ee-c56d-6bf13c6f71d0, timestamp=1468869891279}

第二个输出(getPayload())是

org.springframework.integration.mail.AbstractMailReceiver$IntegrationMimeMessage@6af5615d

from 输出null...

然后我尝试使用MailToStringTransformer

MailToStringTransformer a = transformer();
    a.setCharset("utf-8");
System.out.println(a.transform(message));

它输出有效负载和我所期望的所有标头,但(自然)作为字符串。

我必须做什么才能在对象中获取消息标题和文本?

【问题讨论】:

    标签: java spring spring-integration jakarta-mail


    【解决方案1】:

    不确定您指的是哪个文档,但当前的 4.3 版本有这个:

    默认情况下,入站适配器产生的消息负载是原始MimeMessage;您可以使用该对象查询标题和内容。从 4.3 版开始,您可以提供 HeaderMapper<MimeMessage> 将标头映射到 MessageHeaders;为方便起见,为此提供了DefaultMailHeaderMapper

    还有一点:

    当您不提供标头映射器时,消息负载是 javax.mail 提供的 MimeMessage。该框架提供了MailToStringTransformer...

    如果您需要对映射进行一些自定义,您始终可以提供自己的 HeaderMapper<MimeMessage> 实现或 DefaultMailHeaderMapper 扩展。

    【讨论】:

    • 感谢您的回复。您引用了我链接到的文档。谢谢你。你真的能帮助我吗?我真的不明白如何使用 HeaderMapper
    • 尝试从DefaultMailHeaderMapper bean 注入到您的imap-idle-channel-adapter 开始。还要注意embedded-parts-as-bytes 选项。
    • 谢谢,之前我还以为我错了。问题实际上是我使用了错误版本的 spring 集成并且它没有 DefaultMailHeaderMapper 类。现在它正在工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多