如何使用 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 方法路由到标题中名称的通道?