email - 使用 JavaMail 读取电子邮件时,MimeMultipart 计数为零

标签 email jakarta-mail mime-types multipart

我的应用程序将电子邮件发送到 Exchange 邮件服务器,邮件服务器配置有第三方应用程序,它将电子邮件路由到代理,代理回复该电子邮件。应用程序从用于发送电子邮件的邮箱读取代理回复。

电子邮件发送代码如下;

Message mimeMessage = new MimeMessage(session);
                 mimeMessage.setFrom(new InternetAddress(from));
                 mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
                 mimeMessage.setSubject(subject);
                 mimeMessage.setContent(emailText,"text/plain");

                 mimeMessage.setReplyTo(replyToAddress);

                 Transport.send(mimeMessage); 

这非常有效。当收到代理回复时,应用程序将其读取为;

 if (message.isMimeType("multipart/MIXED")) {
                logger.info("Email MIME Type is: multipart/MIXED");
                MimeMultipart multipart =(MimeMultipart)message.getContent();

                logger.info("Content type = "+multipart.getContentType());
                int count = multipart.getCount();
}

内容类型为“multipart/mixed”,但计数为 0 表示此电子邮件中没有任何部分。

我需要设置系统属性,

System.setProperty("mail.mime.multipart.allowempty", "true"); 

如果未设置,multipart.getCount() 会抛出“missingBoundryException”。

为什么会这样? 我可以看到代理的回复不为空。 电子邮件发送的内容类型为文本/纯文本,为什么回复类型为多部分/混合?

这是否是由于第三方应用程序的电子邮件格式无效造成的,解决方法是什么?

以下是代理回复的截图。 Agent reply

以下是原始 MIME 内容,

Received: from sociaminer.host (192.168.1.29) by thirdpartHost
 (192.168.1.53) with Microsoft SMTP Server (TLS) id 14.1.218.12; Thu, 19 Jan
 2017 17:06:26 +0500
To: hafiz <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2d454c4b44576d4f414c034f414c" rel="noreferrer noopener nofollow">[email protected]</a>>
Message-ID: <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f29a938181939cdcbfb7a1a1b3b5b7bbb6b2909e93dc909e93" rel="noreferrer noopener nofollow">[email protected]</a>>
In-Reply-To: <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="783b3e4f4a3e414c381a1419561a1419" rel="noreferrer noopener nofollow">[email protected]</a>>
References: <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4102077673077875740001232d206f232d20" rel="noreferrer noopener nofollow">[email protected]</a>>
Subject: Re: 1122+50
Content-Type: multipart/mixed;
    boundary="----=_Part_127_14151461.1484827604583"
From: <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1e6c7b6e72675e7c727f307c727f" rel="noreferrer noopener nofollow">[email protected]</a>>
Return-Path: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="acdec9dcc0d5eccec0cd82cec0cd" rel="noreferrer noopener nofollow">[email protected]</a>
Date: Thu, 19 Jan 2017 17:06:26 +0500
X-MS-Exchange-Organization-AuthSource: bla.bla
X-MS-Exchange-Organization-AuthAs: Internal
X-MS-Exchange-Organization-AuthMechanism: 06
X-Originating-IP: [SocialMinerIP]
MIME-Version: 1.0

------=_Part_127_14151461.1484827604583
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 7bit

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">Reply to 50<br>

<blockquote><hr>
<b>From:</b> hafiz &lt;<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="543c35323d2e143638357a363835" rel="noreferrer noopener nofollow">[email protected]</a>&gt;<br><b>Sent:</b> Thursday, January 19, 2017 5:05 PM<br><b>To:</b> testing2 &lt;<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ed99889e9984838adfad8f818cc38f818c" rel="noreferrer noopener nofollow">[email protected]</a>&gt;<br><b>Subject:</b> 1122&#43;50<br>

<html dir="ltr">
<head>

<style type="text/css" id="owaParaStyle"></style>
</head>
<body fpstyle="1" ocsi="0">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Testing 50</div>
</body>
</html>
</blockquote>
------=_Part_127_14151461.1484827604583--

JavaMail 调试输出如下所示,

DEBUG: setDebug: JavaMail version 1.4.7
DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle]
DEBUG IMAP: mail.imap.fetchsize: 16384
DEBUG IMAP: mail.imap.ignorebodystructuresize: false
DEBUG IMAP: mail.imap.statuscachetimeout: 1000
DEBUG IMAP: mail.imap.appendbuffersize: -1
DEBUG IMAP: mail.imap.minidletime: 10
DEBUG IMAP: disable AUTH=PLAIN
DEBUG IMAP: enable STARTTLS
DEBUG IMAP: trying to connect to host "Echange IP", port 143, isSSL false
* OK The Microsoft Exchange IMAP4 service is ready.
A0 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 LOGINDISABLED STARTTLS UIDPLUS CHILDREN IDLE NAMESPACE LITERAL+
A0 OK CAPABILITY completed.
DEBUG IMAP: protocolConnect login, host=192.168.1.53, <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="94e1e7f1e6a9fcf5f2fdeed4f6f8f5baf6f8f5" rel="noreferrer noopener nofollow">[email protected]</a>, password=<non-null>
A1 STARTTLS
A1 OK Begin TLS negotiation now.
A2 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 AUTH=NTLM AUTH=GSSAPI AUTH=PLAIN UIDPLUS CHILDREN IDLE NAMESPACE LITERAL+
A2 OK CAPABILITY completed.
DEBUG IMAP: AUTH: NTLM
DEBUG IMAP: AUTH: GSSAPI
DEBUG IMAP: AUTH: PLAIN
DEBUG IMAP: AUTHENTICATE NTLM command trace suppressed
DEBUG NTLM: type 1 message: 4E 54 4C 4D 53 53 50 00 01 00 00 00 03 A2 00 00 00 00 00 00 23 00 00 00 03 00 03 00 20 00 00 00 31 39 32 
DEBUG NTLM: type 3 message: 4E 54 4C 4D 53 53 50 00 03 00 00 00 18 00 18 00 68 00 00 00 18 00 18 00 80 00 00 00 00 00 00 00 40 00 00 00 22 00 22 00 40 00 00 00 06 00 06 00 62 00 00 00 00 00 00 00 98 00 00 00 01 82 00 00 68 00 61 00 66 00 69 00 7A 00 40 00 65 00 66 00 6C 00 61 00 62 00 2E 00 6C 00 6F 00 63 00 61 00 6C 00 31 00 39 00 32 00 3B 5E 2B 86 67 49 E3 01 C9 9E F2 CA ED 54 21 11 81 89 94 C6 EC E0 26 E3 BA DB E7 5A F4 CA 28 17 7C 0E 8A 08 18 B5 5A 4E 72 4F C5 7F 52 64 FA 76 
DEBUG IMAP: AUTHENTICATE NTLM command result: A3 OK AUTHENTICATE completed.
A4 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 AUTH=NTLM AUTH=GSSAPI AUTH=PLAIN UIDPLUS CHILDREN IDLE NAMESPACE LITERAL+
A4 OK CAPABILITY completed.
DEBUG IMAP: AUTH: NTLM
DEBUG IMAP: AUTH: GSSAPI
DEBUG IMAP: AUTH: PLAIN
DEBUG IMAP: connection available -- size: 1
A5 SELECT INBOX
* 40 EXISTS
* 0 RECENT
* FLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)
* OK [PERMANENTFLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)] Permanent flags
* OK [UNSEEN 39] Is the first unseen message
* OK [UIDVALIDITY 436] UIDVALIDITY value
* OK [UIDNEXT 46] The next unique identifier value
A5 OK [READ-WRITE] SELECT completed.
A6 SEARCH UNSEEN ALL
* SEARCH 39
A6 OK SEARCH completed.
A7 SEARCH UNSEEN ALL
* SEARCH 39
A7 OK SEARCH completed.
main INFO  emailToSms.EmailReader - 1 unread emails read from inbox.
A8 STORE 39 +FLAGS (\Seen)
* 39 FETCH (FLAGS (\Seen))
A8 OK STORE completed.
A9 FETCH 39 (BODY.PEEK[HEADER])
* 39 FETCH (BODY[HEADER] {851}
MIME-Version: 1.0
Received: from HOST (IP) by HOST
 (192.168.1.53) with Microsoft SMTP Server (TLS) id 14.1.218.12; Thu, 19 Jan
 2017 17:06:26 +0500
To: hafiz <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9bf3fafdf2e1dbf9f7fab5f9f7fa" rel="noreferrer noopener nofollow">[email protected]</a>>
Message-ID: <hassan.B69E3DD110000159000004A73F57FEE3.1484827604448.cisco-ccp@bla.bla>
In-Reply-To: <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7330354441354a474632423637413647404b32464032424237324a4742463545463243364a4b4233360b031601075d111f125d111f12" rel="noreferrer noopener nofollow">[email protected]</a>>
References: <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="94d7d2a3a6d2ada0a1d5a5d1d0a6d1a0a7acd5a1a7d5a5a5d0d5ada0a5a1d2a2a1d5a4d1adaca5d4d1ece4f1e6e0baf6f8f5baf6f8f5" rel="noreferrer noopener nofollow">[email protected]</a>>
Subject: Re: 1122+50
Content-Type: multipart/mixed;
    boundary="----=_Part_127_14151461.1484827604583"
From: <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="582c3d2b2c31363f6a183a3439763a3439" rel="noreferrer noopener nofollow">[email protected]</a>>
Return-Path: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="47332234332e29207507252b2669252b26" rel="noreferrer noopener nofollow">[email protected]</a>
Date: Thu, 19 Jan 2017 17:06:26 +0500
X-MS-Exchange-Organization-AuthSource: Expert.bla.bla
X-MS-Exchange-Organization-AuthAs: Internal
X-MS-Exchange-Organization-AuthMechanism: 06
X-Originating-IP: [IP]

)
A9 OK FETCH completed.
A10 FETCH 39 (ENVELOPE INTERNALDATE RFC822.SIZE)
* 39 FETCH (ENVELOPE ("Thu, 19 Jan 2017 17:06:26 +0500" "Re: 1122+50" ((NIL NIL "testing2" "bla.bla")) NIL NIL (("hafiz" NIL "hafiz" "bla.bla")) NIL NIL "<<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="98dbdeafaadea1acadd9a9dddcaaddacaba0d9adabd9a9a9dcd9a1aca9addeaeadd9a8dda1a0a9d8dde0e8fdeaecb6faf4f9b6faf4f9" rel="noreferrer noopener nofollow">[email protected]</a>>" "<hassan.B69E3DD110000159000004A73F57FEE3.1484827604448.cisco-ccp@bla.bla>") INTERNALDATE "19-Jan-2017 17:06:26 +0500" RFC822.SIZE 1250)
A10 OK FETCH completed.
A11 FETCH 39 (BODYSTRUCTURE)
* 39 FETCH (BODYSTRUCTURE ("multipart" "mixed" ("boundary" "----=_Part_127_14151461.1484827604583") NIL NIL 7BIT 0 NIL NIL NIL NIL))
A11 OK FETCH completed.

DEBUG IMAP: IMAPProtocol noop
A12 NOOP
A12 OK NOOP completed.

最佳答案

这是 Microsoft Exchange 中的一个错误。向 Microsoft 报告此错误,并在可能的情况下升级到更新版本或更新的服务包,以防他们已修复该问题。

Exchange 返回邮件的 BODYSTRUCTURE 信息,就好像它是单部分邮件一样,而实际上它是多部分邮件。这违反了 IMAP 协议(protocol)规范。

您可以使用workaround in the JavaMail FAQ .

此外,您可能想要upgrade to a newer version of JavaMail - 1.4.7 已经很旧了,当前版本是 1.5.6。

关于email - 使用 JavaMail 读取电子邮件时,MimeMultipart 计数为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41743012/

相关文章:

javascript - jQuery 或 JavaScript : get MIME type of client file

jquery - Colorbox 无法显示动态生成的图像

bash - 无法弄清楚如何在 bash 脚本中将 ^D (EOT) 信号发送到 mailx

php - 在 Mac OS 上禁用 PHP 邮件?

java - 实现故障转移电子邮件服务...如果出现故障,请使用其他电子邮件服务提供商

javamail 在工作站上通过 tls 发送,但不在服务器上发送

Java 邮件异常错误;

ruby-on-rails - Rails 为 MIME 类型错误的 .otf 文件提供服务。应用程序/vnd.oasis.opendocument.formula-template

email - 如何在ssmtp中更改发件人姓名?

php - Codeigniter 从 HTML 电子邮件中剥离字符