我正在接收带有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));
哪个输出有效负载和我期望的所有头,但(自然地)作为String。
如何在对象中获取邮件标题和文本?
答案 0 :(得分:1)
不确定您所引用的文档,但当前的4.3
版本具有以下内容:
默认情况下,入站适配器生成的消息的有效负载是原始
MimeMessage
;您可以使用该对象查询标题和内容。从版本4.3开始,您可以提供HeaderMapper<MimeMessage>
来将标头映射到MessageHeaders
;为方便起见,为此提供了DefaultMailHeaderMapper
。
还有一点:
如果不提供标头映射器,则消息有效负载是javax.mail提供的MimeMessage。该框架提供了
MailToStringTransformer
...
如果您需要对地图进行自定义,则始终可以提供自己的HeaderMapper<MimeMessage>
实施或DefaultMailHeaderMapper
扩展。