如何使用 Spring Integration Mail 从“text/html; charset=us-ascii”检索电子邮件内容正文

Posted

技术标签:

【中文标题】如何使用 Spring Integration Mail 从“text/html; charset=us-ascii”检索电子邮件内容正文【英文标题】:How to retrieve email content body from "text/html; charset=us-ascii" with Spring Integration Mail 【发布时间】:2021-08-31 21:52:32 【问题描述】:

我正在使用 Spring Integration Mail 从 Exchange Server 拉取和处理电子邮件的内容。 使用 imap-idle-channel-adapter。电子邮件被拉好。 如果电子邮件有附件,则内容类型为多部分/混合(“text/html; charset=us-ascii”和附件)和来自 text/html 的电子邮件正文; charset=us-ascii 检索良好。

但是,如果电子邮件没有附件,则内容类型只是“text/html; charset=us-ascii”。有时,它以“text/html charset=windows-1252”的形式出现。 在任何情况下,即使内容对象是字符串,电子邮件正文也会被检索为 null 或空。

我应该如何检索电子邮件正文?如果电子邮件是多部分/混合的,则可以正常检索 text/html 的电子邮件正文。好诡异!

代码

控制台

配置是这样的。

<int-mail:imap-idle-channel-adapter id="customAdapter"
  store-uri="imaps://[username]:[password]@[exchange-imap-server]:993/INBOX"
  channel="receiveChannel"
  auto-startup="true"
  should-delete-messages="false"
  should-mark-messages-as-read="true"
  auto-close-folder="false"
  java-mail-properties="javaMailProperties"/>

<util:properties id="javaMailProperties">
  <prop key="mail.imap.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
  <prop key="mail.imap.socketFactory.fallback">false</prop>
  <prop key="mail.store.protocol">imaps</prop>
  <prop key="mail.debug">false</prop>
</util:properties>

 

正如我所说,当电子邮件没有附件时,只有无法检索电子邮件正文。内容类型为“text/html; charset=us-ascii”。

如果内容是“multipart/mixed”,即使邮件正文的 BodyPart 具有相同的内容类型“text/html; charset=us-ascii”,也可以正常检索邮件正文内容。

从 gmail 提取电子邮件时,在所有情况下都会检索相同的代码。

【问题讨论】:

Please do not upload images of code/errors when asking a question. 请出示您的imap-idle-channel-adapter 配置。如果您要自己解析该复杂消息,请参阅setAutoCloseFolder(false) 我添加了 imap-idle-channel-adapter。我已将自动关闭文件夹配置为 false。我不知道为什么当电子邮件是多部分/混合时可以正常检索正文内容。在这种情况下,BodyPart 对象是完全相同的内容类型 text/html; charset=us-ascii,就像电子邮件没有附件一样。 我认为 GMain 总是产生多部分消息,即使没有附件。那么,如果在从该通道适配器生成消息之前不关闭文件夹,它是如何工作的呢? 自动关闭文件夹始终为 False。在代码中,我们不会关闭或打开文件夹。该文件夹始终处于打开状态。 【参考方案1】:

最后,当电子邮件没有附件时,我能够检索内容文本。内容类型为“text/html; charset=us-ascii”。我在 Outlook (Exchange Server) 和 Gmail 中测试了该修复程序。 修复是在 imap-idle-channel-adapter 中添加

简单内容=真

有效负载将是 javax.mail.Message,而不是 IMAPMessage。

【讨论】:

以上是关于如何使用 Spring Integration Mail 从“text/html; charset=us-ascii”检索电子邮件内容正文的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Micrometer 获取 Spring Integration 队列中的消息数?

如何在 Spring Integration 中动态注册 Feed Inbound Adapter?

Spring Integration:如何使用 IntegrationFlow 在 sftp 上动态创建子目录

Spring Integration Java DSL:如何使用 channelMapping 方法路由到标题中名称的通道?

Spring Integration:如何一次处理多条消息?

如何在 Spring Integration 中获取 rss feedChannel SyndEntry 消息的来源?