2017-01-19 11 views
1

アプリケーションがExchangeメールサーバーに電子メールを送信し、メールサーバーが電子メールをエージェントとエージェントに返信するサードパーティアプリケーションで構成されます。アプリケーションは、電子メールを送信するために使用されるメールボックスからエージェント応答を読み取ります。JavaMailを使用して電子メールを読み取ったときにMimeMultipartの数が0になる

メール送信コードは以下のとおりです。

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" をスローします。

なぜそうですか? エージェントの返信が空でないことがわかります。 コンテンツタイプが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(新しい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のバグで、以下のように見えます。可能であれば、このバグをMicrosoftに報告し、可能な場合は新しいバージョンまたはそれより新しいサービスパックにアップグレードしてください。

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

関連する問題