我正在春季收到电子邮件,到目前为止已经有了一个非常基本的脚本
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
扩展名。