Java 春季积分和收到日期问题

Java 春季积分和收到日期问题,java,imap,spring-integration,jakarta-mail,Java,Imap,Spring Integration,Jakarta Mail,我正在使用最新的SpringIntegration(4.1.5)javax.mail(1.4.7)库,但这个问题似乎从一开始就存在 我试图通过IMAP协议从邮件服务器获取接收日期,但SI始终返回null。这是因为中的第301行 因此,与其让我获取IMAPMessage实例,不如让我获取具有getReceivedDate方法存根的MimeMessage: public Date getReceivedDate() throws MessagingException { return null;

我正在使用最新的SpringIntegration(4.1.5)javax.mail(1.4.7)库,但这个问题似乎从一开始就存在

我试图通过IMAP协议从邮件服务器获取接收日期,但SI始终返回null。这是因为中的第301行

因此,与其让我获取IMAPMessage实例,不如让我获取具有getReceivedDate方法存根的MimeMessage:

public Date getReceivedDate() throws MessagingException {
return null;    
}
我看到报头包含notnull元素Received,所以我看到的唯一选项是手动解析这个报头

这是SI的正确行为吗?Bug还是特性?
如何避免人工解析接收的日期头

接收日期可作为
internaldate
fetch项使用


解析接收到的数据是一件非常不有趣的事情,这可能就是为什么Spring开发人员还没有做这件事,以及为什么您会讨厌做这件事。看看internaldate是否可以。

我一直在看Sun代码;它使用
INTERNALDATE
fetch项填充
receivedDate
属性

javamail 1.5.2中的第1194行

else if (item instanceof INTERNALDATE)
    receivedDate = ((INTERNALDATE)item).getDate();

然而,Spring并没有暴露这一点;我提出了一个.

疯狂的问题,但你有没有试着把mimessage转换成IMAPMessage?当然。.getPayload()中的(com.sun.mail.imap.IMAPMessage)-无法将“org.springframework.integration.mail.AbstractMailReceiver$IntegrationMimeMessage”强制转换为“com.sun.mail.imap.IMAPMessage”。不幸的是,Spring也没有公开内部日期。您可以从已有的IMAPMessage对象获取它。或者,等等。也许我误解了,你没有IMAPMessage对象。对不起,是的,这是一只虫子;新消息是从旧消息创建的,但它是普通的
MimeMessage
而不是
IMAPMessage
,我们需要保留对旧消息的引用,以便可以委托给它的方法。
else if (item instanceof INTERNALDATE)
    receivedDate = ((INTERNALDATE)item).getDate();