轮询来自一个应用的多个电子邮件帐户

时间:2014-12-06 04:35:21

标签: spring email javamail spring-integration

我应该使用spring集成在我们的邮件服务器上轮询3个电子邮件收件箱  我有三个入站电子邮件适配器,每个轮询器处理不同的业务逻辑。 假设收件箱是I1,I2和I3 当有人在收件人地址中发送一封带有三个电子邮件ID的电子邮件时,就会出现问题。(I1 @ domain.org,I2 @ domain.org,I3.domain.org)。三个查询者按预期从每个收件箱中收集电子邮件。

有没有办法确定每个电子邮件轮询器的正确“收件人”地址,并获取mail_to标头中的值。现在它有(I1 @ domain.org,I2 @ domain.org,I3.domain.org)。

2 个答案:

答案 0 :(得分:1)

这取决于你对“正确”的意思。

电子邮件标题中可能没有与邮箱主要用户对应的地址。或者可能不止一个。

在简单的情况下,有人必须告诉您与您正在轮询的邮箱相关联的主电子邮件地址。通常有明显的关联,但并非总是如此。如果有人告诉你这个,你可以检查传入的消息并尝试匹配它们,但同样可能没有匹配。

您想如何使用这些信息?这可能决定是否适合猜测,使用启发式或放弃,因为你无法解决问题。

答案 1 :(得分:0)

根据对其他答案的评论,通过"对"你的意思是确定电子邮件来自哪个适配器。

我们不清楚为什么你需要这个,因为每个都是由不同的业务逻辑处理的#34;无论如何。我可以看到,如果适配器提供相同的逻辑,它可能是有用的。

目前还没有办法让适配器自己添加标题。

您可以在每个适配器后添加<header-enricher/>以添加标头,以识别哪个适配器收到了该消息。

编辑:(以下评论)。

您无法使用<int-mail:header-enricher/>作为自定义标题,但您可以使用常规标题扩展程序:

<int:header-enricher ...>
   <int:header name="#{T(org.springframework.integration.mail.MailHeaders).TO}"
               value="I1@domain.org" />
   <int:header name="x-Foo" value="bar" />
   <int:header name="x-Baz" expression="payload.getHeader("x-baz") /> <!-- payload is a MimeMessage -->
</int:header-enricher>

int-mail版本只是内置标题的便利。

没有&#34; TO&#34;要覆盖的标头 - 它没有由入站适配器填充。