我正在春季收到电子邮件,到目前为止已经有了一个非常基本的脚本

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));


它输出有效载荷和我期望的所有标头,但是(自然地)输出为String。

我该怎么做才能在对象中获取消息标题和文本?

最佳答案

不确定要参考的文档,但是当前的4.3版本具有以下内容:


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


还有一点:


  如果不提供标题映射器,则消息有效负载是javax.mail呈现的MimeMessage。该框架提供了MailToStringTransformer ...


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

10-06 08:40