在Spring Integration中获取带有原始标题和附件的电子邮件



我的问题基于主题在这里输入链接描述

我还使用了我自己的DefaultMailHeaderMapper实现,并设置了embedded-parts-as-bytes = true

但我有一个问题——我无法获取电子邮件附件。

我得到消息,但我不能得到附件,因为,正如我从日志中看到的,附件没有边界(例如,我将.gitignore文件附加到邮件(,因此,MimeMessage解析器看不到附件:

A15 FETCH 291 (BODY.PEEK[HEADER])
* 291 FETCH (BODY[HEADER] {860}
Content-Type: multipart/mixed; boundary="=-Kj0VeCHE3Jjjhv1T0WeN"
MIME-Version: 1.0
Message-Id: <1533397403.64233522.exgaq3po@frv34.fwdcdn.com>
X-Mailer: mail.ukr.net 5.0
To: Pasha <xxx@ukr.net>
From: =?UTF-8?b?0J/QsNCy0LXQuw==?= <xxx@ukr.net>
Date: Sat, 04 Aug 2018 18:43:37 +0300
Received: from [10.10.80.11] (helo=frv197.fwdcdn.com) by frv34.fwdcdn.com; Sat, 04 Aug
2018 18:43:37 +0300
Received: from xxx@ukr.net by frv34.fwdcdn.com;    Sat, 04 Aug 2018 18:43:37 +0300
Received: from [10.10.10.34] (helo=frv34.fwdcdn.com)
by frv197.fwdcdn.com with smtp ID 1flyiP-000B5t-US
for xxx@ukr.net; Sat, 04 Aug 2018 18:43:37 +0300
Subject: test3
Return-path: <xxx@ukr.net>
)
A15 OK FETCH completed
A16 FETCH 291 (BODY.PEEK[1.MIME])
* 291 FETCH (BODY[1.MIME] {74}
Content-Type: multipart/alternative; boundary="=-Dw7rk3OclJQtNyghQ2Sv"
)
A16 OK FETCH completed
A17 FETCH 291 (BODY.PEEK[1]<0.16384>)
* 291 FETCH (BODY[1]<0> {374}
--=-Dw7rk3OclJQtNyghQ2Sv
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: binary
Content-Length: 2
--=-Dw7rk3OclJQtNyghQ2Sv
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: base64
PGh0bWw+PGJvZHk+PHNwYW4gY2xhc3M9InhmbV84MjI2NTc1MSI+PGRpdj48YnIvPjwvZGl2Pjwv
c3Bhbj48L2JvZHk+PC9odG1sPg0K
--=-Dw7rk3OclJQtNyghQ2Sv--
)
A17 OK FETCH completed
A18 FETCH 291 (BODY.PEEK[2.MIME])
* 291 FETCH (BODY[2.MIME] {168}
Content-Type: application/octet-stream; name=".gitignore"
Content-Transfer-Encoding: base64
Content-Id: <asor_1533397403953NSzHs>
Content-Disposition: attachment
)
A18 OK FETCH completed
A19 FETCH 291 (BODY.PEEK[2]<0.172>)
* 291 FETCH (BODY[2]<0> {172}
Ly5pZGVhLw0KLy5zZXR0aW5ncy8NCi9iaW4vDQovdGFyZ2V0Lw0KLmNsYXNzcGF0aA0KLnByb2pl
Y3QNCi5naXRpZ25vcmUNCi9zcmMvbWFpbi9yZXNvdXJjZXMvZW1haWwucHJvcGVydGllcyANCi9u
YnByb2plY3Qv
)
A19 OK FETCH completed
A20 EXAMINE Download
* FLAGS (Answered Flagged Deleted Seen Draft $Forwarded)
* 291 EXISTS
* 0 RECENT
* OK [PERMANENTFLAGS (Answered Flagged Deleted Seen Draft $Forwarded)]
* OK [UIDVALIDITY 1073741835]
A20 OK [READ-ONLY] SELECT completed
A21 CLOSE
A21 OK close completed

例如,下面我显示了不使用headerMapper的代码:

* 291 FETCH (BODY[]<0> {1730}
Return-path: <xxx@ukr.net>
Received: from [10.10.80.11] (helo=frv197.fwdcdn.com) by frv34.fwdcdn.com; Sat, 04 
Aug 2018 18:43:37 +0300
Received: from [10.10.10.34] (helo=frv34.fwdcdn.com)
by frv197.fwdcdn.com with smtp ID 1flyiP-000B5t-US
for xxx@ukr.net; Sat, 04 Aug 2018 18:43:37 +0300
Date: Sat, 04 Aug 2018 18:43:37 +0300
From: =?UTF-8?b?0J/QsNCy0LXQuw==?= <yyy@ukr.net>
Subject: test3
To: Pasha <xxx@ukr.net>
X-Mailer: mail.ukr.net 5.0
Message-Id: <1533397403.64233522.exgaq3po@frv34.fwdcdn.com>
Received: from xxx@ukr.net by frv34.fwdcdn.com;
Sat, 04 Aug 2018 18:43:37 +0300
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-Kj0VeCHE3Jjjhv1T0WeN" 
--=-Kj0VeCHE3Jjjhv1T0WeN
Content-Type: multipart/alternative; boundary="=-Dw7rk3OclJQtNyghQ2Sv"
--=-Dw7rk3OclJQtNyghQ2Sv
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: binary
Content-Length: 2
--=-Dw7rk3OclJQtNyghQ2Sv
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: base64
PGh0bWw+PGJvZHk+PHNwYW4gY2xhc3M9InhmbV84MjI2NTc1MSI+PGRpdj48YnIvPjwvZGl2Pjwv
c3Bhbj48L2JvZHk+PC9odG1sPg0K
--=-Dw7rk3OclJQtNyghQ2Sv--
--=-Kj0VeCHE3Jjjhv1T0WeN
Content-Type: application/octet-stream; name=".gitignore"
Content-Transfer-Encoding: base64
Content-Id: <asor_1533397403953NSzHs>
Content-Disposition: attachment
Ly5pZGVhLw0KLy5zZXR0aW5ncy8NCi9iaW4vDQovdGFyZ2V0Lw0KLmNsYXNzcGF0aA0KLnByb2pl
Y3QNCi5naXRpZ25vcmUNCi9zcmMvbWFpbi9yZXNvdXJjZXMvZW1haWwucHJvcGVydGllcyANCi9u
YnByb2plY3Qv
--=-Kj0VeCHE3Jjjhv1T0WeN--

这是Spring Integration的一个bug,还是我必须添加一些配置?我使用的是Spring Integration 4.3.17,我也在5.0.5版本上尝试过。

请参阅JIRA了解更多信息:https://jira.spring.io/browse/INT-4299.

从版本5.2开始,我们介绍了autoCloseFolder,您可以在MailReceiverfalse上配置它。这允许您在生成的消息的payload中使用禁用的headerMapper和完整的原始MimeMessage。因此,无论需要什么,都可以在下游解析附件。

如果需要,则需要从IntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCE关闭Folder

相关内容

最新更新