【问题标题】:spring integration inbound email with custom header带有自定义标头的春季集成入站电子邮件
【发布时间】:2013-03-26 14:39:47
【问题描述】:

我有一个 spring 应用程序,它通过 GMail 收件箱发送电子邮件并读取电子邮件,并处理通过该帐户发送但由于无法识别收件人地址而返回的任何未送达的邮件消息。

我已经完成了所有配置和工作,但我还在出站邮件上设置了一个自定义标头,我希望在阅读返回的邮件时检索该标头。调试应用显示消息被正确读取,但缺少自定义标头值。

这是我的配置:

<mail:inbound-channel-adapter id="imapAdapter"
        store-uri="#{mailIntegrationProperties['mail.imap.url']}"
        java-mail-properties="mailIntegrationProperties" 
        channel="receiveEmailChannel"
        should-delete-messages="false" 
        should-mark-messages-as-read="true"
        auto-startup="true"
        max-fetch-size="#{mailIntegrationProperties['mail.max.fetch.size']}">
    <int:poller time-unit="SECONDS" fixed-rate="#{mailIntegrationProperties['mail.poller.seconds']}" />
</mail:inbound-channel-adapter>

<int:channel id="receiveEmailChannel" />

<bean id="mailMessageReceiver" class="com.myapp.integration.mail.EmailMessageReceiver" />

<int:service-activator input-channel="receiveEmailChannel" ref="mailMessageReceiver" output-channel="emailEventMessageQueue" method="receive" />

为简洁起见,我已关闭服务激活器的输出通道,但系统按预期工作,但在我处理消息时缺少自定义标头。

关于如何配置 Spring 以读取该自定义标头的任何想法?

干杯!

【问题讨论】:

    标签: spring-integration gmail-imap email-headers


    【解决方案1】:

    我假设您的意思是您在 SMTP 出站邮件上设置了一些“X-foo”标头,并希望在收到的邮件中看到它。

    放在receiveEmailChannel上的消息的有效载荷是收到的mime消息;没有对标头进行过滤,所有收到的标头都将包含在其中。

    如果您没有看到标题,则表示它不在消息中。

    如果您在 javamail 属性中打开调试 &lt;prop key="mail.debug"&gt;true&lt;/prop&gt;,您将在控制台中看到收到的消息(包括所有标头)。

    【讨论】:

    • 谢谢,我试试看。
    • 嘿 Gary,启用 mail.debug 后,消息将显示在我的服务器控制台中,并带有 X-foo 标头。虽然当我在 mailMessageReceiver bean 中使用断点进行调试时,这是我的代码在此工作流中与 Spring Integration 交互的第一个点,但传递给我的代码的 MimeMessage 没有 X-foo 标头。偶然的机会,我还升级了 Spring Int 的 2 个次要版本,从 2.2.0 升级到 2.2.2,但这并没有什么区别。我想知道我是否缺少一些 Spring 配置?塔:)
    • 进一步调试表明 Spring AbstractMailReceiver 没有设置 FetchProfile 标志来检索所有标头。正在调查是否可以使用 Java Mail 属性来设置启用此功能或可能将 ImapMailReceiver 子类化...
    • 看起来这不可能。无法配置 ImapMailReceiver 或 AbstractMailReceiver 以将 IMAPFolder.FetchProfileItem.HEADERS 添加到传递到 JavaMail API 的提取配置文件中。你知道我如何注册一个自定义 bean 来覆盖 AbstractMailReceiver.fetchMessages() 吗?我不确定如何使用 int-mail 命名空间来执行此操作。此外,是否有可能将其配置为 Spring Integration 3?干杯!
    • 嗯——这对我来说似乎不是问题——我刚刚对 gmail 进行了测试,并收到了一条包含 22 个标头的消息,其中包括几个 X-* 标头;并且所有 22 个标头都出现在 MimeMessage(下游组件中的断点)中。为了清楚起见 - 如果您在 DEBUG 日志中看到标题(就在 * 7 FETCH (BODY[]&lt;0&gt; {2724} 之后,那么 已经 被提取了 - 我们只需要弄清楚为什么它们没有进入您的 MimeMessage .
    猜你喜欢
    • 1970-01-01
    • 2012-01-20
    • 2023-03-04
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 2011-03-06
    相关资源
    最近更新 更多