【问题标题】:spring integation and received date issue春季集成和收到日期问题
【发布时间】:2015-08-31 17:18:03
【问题描述】:

我正在使用最新的 spring 集成 (4.1.5) javax.mail (1.4.7) 库,但看起来这个问题从一开始就存在。

我正在尝试通过 IMAP 协议从邮件服务器获取接收日期,但 SI 总是返回 null。这是因为https://github.com/spring-projects/spring-integration/blob/4.1.x/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java中的第301行

MimeMessage mimeMessage = new IntegrationMimeMessage((MimeMessage) filteredMessages[i]);

所以不是让我获取 IMAPMessage 实例,而是让我获取具有方法 getReceivedDate 的存根的 MimeMessage:

public Date getReceivedDate() throws MessagingException {
return null;    
}

我看到标头不包含空元素 Received 所以我看到的唯一选择是手动解析此标头。

SI 的行为是否正确?错误或功能? 以及如何避免手动解析收到的日期标头?

【问题讨论】:

  • 疯狂的问题,但您是否尝试将 MimeMessage 转换为 IMAPMessage?
  • 当然。 (com.sun.mail.imap.IMAPMessage)in.getPayload() - 无法将 'org.springframework.integration.mail.AbstractMailReceiver$IntegrationMimeMessage' 转换为 'com.sun.mail.imap.IMAPMessage'

标签: java imap spring-integration jakarta-mail


【解决方案1】:

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

Parsing Received 很不好玩,这可能是 Spring 开发人员还没有这样做以及为什么你会讨厌这样做的原因。看看internaldate 是否可以。

【讨论】:

  • 不幸的是,Spring 也没有公开内部日期 JIRA
  • 您可以从已有的 IMAPMessage 对象中获取它。 javamail.java.net/nonav/docs/api/com/sun/mail/imap/…
  • 或者,等等。也许我误解了,你没有那个 IMAPMessage 对象。对不起。
  • 是的 - 这是一个错误;一条新消息是从旧消息创建的,但它是一个普通的 MimeMessage 而不是 IMAPMessage 我们需要保留对旧消息的引用,以便我们可以委托给它的方法。
【解决方案2】:

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

javamail 1.5.2 中的第 1194 行...

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

但是,Spring 没有公开这一点;我创建了一个JIRA issue

【讨论】:

    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    相关资源
    最近更新 更多