2017-01-19 73 views
1

我的應用程序向Exchange郵件服務器發送電子郵件,郵件服務器配置有第三方應用程序,在該應用程序中將郵件路由到代理,代理回覆該電子郵件。應用程序從用於發送電子郵件的郵箱中讀取代理回覆。當使用JavaMail讀取電子郵件時,MimeMultipart計數爲零

電子郵件發送代碼在下面;

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(); 
} 

內容類型是「多部分/混合的」,但計數爲0意味着有在該電子郵件沒有部件。

我需要設置系統屬性,

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

如果沒有設置它,multipart.getCount()拋出 「missingBoundryException」。

爲什麼是這樣? 我可以看到代理的回覆不是空的。 電子郵件是以text/plain的內容類型發送的,爲什麼回覆類型是multipart/mixed?

這是由於第三方應用程序對電子郵件進行無效格式化,解決方法是什麼?

以下是代理回覆的快照。 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 <[email protected]> 
Message-ID: <[email protected]> 
In-Reply-To: <[email protected]> 
References: <[email protected]> 
Subject: Re: 1122+50 
Content-Type: multipart/mixed; 
    boundary="----=_Part_127_14151461.1484827604583" 
From: <[email protected]> 
Return-Path: [email protected] 
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;[email protected]&gt;<br><b>Sent:</b> Thursday, January 19, 2017 5:05 PM<br><b>To:</b> testing2 &lt;[email protected]&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, [email protected], 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 <[email protected]> 
Message-ID: <[email protected]bla.bla> 
In-Reply-To: <[email protected]> 
References: <[email protected]> 
Subject: Re: 1122+50 
Content-Type: multipart/mixed; 
    boundary="----=_Part_127_14151461.1484827604583" 
From: <[email protected]> 
Return-Path: [email protected] 
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 "<[email protected]>" "<[email protected]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. 
+0

發佈回覆的原始MIME內容,以便我們可以看到它的錯誤。你可以通過使用message.writeTo(new FileOutputStream(「msg.txt」));然後看看msg.txt.file。 –

+0

@BillShannon添加了原始MIME內容。 – sikander

+0

我沒有看到任何明顯的錯誤。你使用的是IMAP嗎? [JavaMail調試輸出](http://www.oracle.com/technetwork/java/javamail/faq/index.html#debug)顯示什麼? –

回答

2

這是Microsoft Exchange的錯誤。向微軟報告此錯誤,並在可能的情況下升級到更新版本或更新的服務包,以防他們已經修復它。

Exchange正在返回消息的BODYSTRUCTURE信息,就好像它是一個單獨的部分消息,而實際上它是一個多部分消息。這違反了IMAP協議規範。您可以使用workaround in the JavaMail FAQ

此外,你可能想要upgrade to a newer version of JavaMail - 1.4.7是相當古老的,目前的版本是1.5.6。

+0

JavaMail 1.5.6也存在同樣的問題。 升級Exchange工作。謝謝。 – sikander

相關問題