2014-01-22 3 views
0

Я испытываю странные проблемы с IMAP в JavaMail.Содержимое сообщения JavaMail IMAP SSL/NON SSL

Я уже много знаю с точки зрения JavaMail, и я также знаю, где искать ответы на вопросы/ответы, но я не могу найти решение этой проблемы.

У меня есть канал IMAP, на котором я могу установить SSL включен или отключен. Когда я создаю новое сообщение электронной почты (скажем, Subject: «TEST», Body: «HELLO») и отправьте его от клиента Thunderbird, чтобы загрузить его с помощью моего канала IMAP, все становится странным.

На SSL ENABLED все работает нормально. (в моем канале IMAP) Я получаю сообщение из папки электронной почты, после успешного подключения к хранилищу, тогда я получаюContent() из этого сообщения (это ALWAYS String type, а не MimeMultipart или Multipart), а вывод - «HELLO».

Однако, на SSL DISABLED, все также работает нормально, но я получаю другое тело. Похоже, что все сообщение разобрано (смотрите ниже)

message.getContent(). ToString(); используя SSL

HELLO 

message.getContent(). toString(); НЕ использовать SSL

Return-Path: [email protected] 
Received: from [127.0.0.1] (localhost [127.0.0.1]) by PC ; Wed, 22 Jan 2014 13:23:17 +0100 
Message-ID: <52DFB835.902030[email protected]> 
Date: Wed, 22 Jan 2014 13:23:17 +0100 
From: "[email protected]" <[email protected]> 
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 
MIME-Version: 1.0 
To: [email protected] 
Subject: TEST 
Content-Type: text/plain; charset=UTF-8; format=flowed 
Content-Transfer-Encoding: 7bit 

Кто-нибудь знает, что происходит? Ниже приведены фрагменты моего кода (чтобы показать вам наиболее важные части:

// properties used to create session 
String protocol = useSSL ? "imaps" : imap"; 

properties.setProperty("mail.store.protocol", protocol); 
properties.setProperty("mail." + protocol + ".host", ...); 
properties.setProperty("mail." + protocol + ".user", ...); 
properties.setProperty("mail." + protocol + ".port", ...); 
properties.setProperty("mail." + protocol + ".password", ...); 

// only when using ssl 
properties.setProperty("mail.imaps.auth", "true"); 
properties.setProperty("mail.imaps.starttls.enable", "true"); 
properties.setProperty("mail.imaps.ssl.checkserveridentity", "true"); 
properties.setProperty("javax.net.ssl.trustStore", ...); 
properties.setProperty("javax.net.ssl.trustStorePassword", ...); 

// get store and other important things 
Store store = this.session.getStore(protocol); 
Folder folder = store.getFolder("INBOX"); 
folder.open(Folder.READ_WRITE); 
Message[] newMessages = folder.getMessages(); 
for (Message newMessage : newMessages) { 
    Object o = newMessage.getContent(); 
    System.out(o.toString()); // should write "HELLO", but instead it parses whole message (only on NON SSL MODE!) 
} 

// редактировать: добавлена ​​отладочную информацию // редактировать 2: отладочная информацию теперь содержит полную информацию с выборкой папки, используя {CONTENT_INFO, ФЛАГИ, КОНВЕРТ}

DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc] 
DEBUG: mail.imap.fetchsize: 16384 
DEBUG: protocolConnect returning false, host=127.0.0.1, [email protected], password=<null> 
* OK IMAPrev1 
A0 CAPABILITY 
* CAPABILITY IMAP4 IMAP4rev1 CHILDREN IDLE QUOTA SORT ACL NAMESPACE RIGHTS=texk 
A0 OK CAPABILITY completed 
DEBUG: protocolConnect login, host=127.0.0.1, [email protected], password=<non-null> 
A1 LOGIN [email protected] password 
A1 OK LOGIN completed 
DEBUG: connection available -- size: 1 
A2 SELECT INBOX 
* 1 EXISTS 
* 0 RECENT 
* FLAGS (\Deleted \Seen \Draft \Answered \Flagged) 
* OK [UIDVALIDITY 1378802425] current uidvalidity 
* OK [UNSEEN 50167] unseen messages 
* OK [UIDNEXT 50168] next uid 
* OK [PERMANENTFLAGS (\Deleted \Seen \Draft \Answered \Flagged)] limited 
A2 OK [READ-WRITE] SELECT completed 
A3 SEARCH UNSEEN ALL 
* SEARCH 1 
A3 OK Search completed 
A4 FETCH 1 (BODYSTRUCTURE) 
* 1 FETCH (UID 50167 BODYSTRUCTURE ("TEXT" "PLAIN" ("CHARSET" "UTF-8") NIL "test" "7bit" 7 2)) 
A4 OK FETCH completed 
A5 FETCH 1 (BODY[TEXT]<0.7>) 
* 1 FETCH (UID 50167 ENVELOPE ("Tue, 28 Jan 2014 15:08:59 +0100" "test" (("[email protected]" NIL "and" "127.0.0.1")) (("[email protected]" NIL "and" "127.0.0.1")) (("[email protected]" NIL "and" "127.0.0.1")) (("[email protected]" NIL "and" "127.0.0.1")) NIL NIL NIL "<[email protected]>") BODY[HEADER] {479} 
Return-Path: [email protected] 
Received: from [127.0.0.1] (localhost [127.0.0.1]) by A-PC ; Tue, 28 Jan 2014 15:08:59 +0100 
Message-ID: <[email protected]> 
Date: Tue, 28 Jan 2014 15:08:59 +0100 
From: "[email protected]" <[email protected]> 
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 
MIME-Version: 1.0 
To: [email protected] 
Subject: test 
Content-Type: text/plain; charset=UTF-8; format=flowed 
Content-Transfer-Encoding: 7bit 

BODY[TEXT]<0> {7} 
HELLO 
) 
A5 OK FETCH completed 
A6 FETCH 1 (FLAGS) 
* 1 FETCH (UID 50167 FLAGS (\Seen)) 
A6 OK FETCH completed 
A7 FETCH 1 (ENVELOPE INTERNALDATE RFC822.SIZE FLAGS BODYSTRUCTURE) 
* 1 FETCH (UID 50167 RFC822.SIZE 462 FLAGS (\Seen) INTERNALDATE "28-Jan-2014 15:08:59 +0100" ENVELOPE ("Tue, 28 Jan 2014 15:08:59 +0100" "test" (("[email protected]" NIL "and" "127.0.0.1")) (("[email protected]" NIL "and" "127.0.0.1")) (("[email protected]" NIL "and" "127.0.0.1")) (("[email protected]" NIL "and" "127.0.0.1")) NIL NIL NIL "<[email protected]>") BODYSTRUCTURE ("TEXT" "PLAIN" ("CHARSET" "UTF-8") NIL "test" "7bit" 7 2)) 
A7 OK FETCH completed 
A8 STORE 1 +FLAGS (\Seen) 
* 1 FETCH (FLAGS (\Seen) UID 50167) 
A8 OK STORE completed 
A9 CLOSE 
A9 OK CLOSE completed 
DEBUG: added an Authenticated connection -- size: 1 
IMAP DEBUG: IMAPProtocol noop 
A10 NOOP 
A10 OK NOOP completed 
DEBUG: connection available -- size: 1 
A11 SELECT INBOX 
* 1 EXISTS 
* 0 RECENT 
* FLAGS (\Deleted \Seen \Draft \Answered \Flagged) 
* OK [UIDVALIDITY 1378802425] current uidvalidity 
* OK [UIDNEXT 50168] next uid 
* OK [PERMANENTFLAGS (\Deleted \Seen \Draft \Answered \Flagged)] limited 
A11 OK [READ-WRITE] SELECT completed 
A12 SEARCH UNSEEN ALL 
* SEARCH 
A12 OK Search completed 
A13 CLOSE 
A13 OK CLOSE completed 
DEBUG: added an Authenticated connection -- size: 1 
IMAP DEBUG: IMAPProtocol noop 
A14 NOOP 
A14 OK NOOP completed 
A15 LOGOUT 
* BYE Have a nice day 
A15 OK Logout completed 
DEBUG: IMAPStore connection dead 
DEBUG: IMAPStore cleanup, force false 
DEBUG: IMAPStore cleanup done 

сервер hMailServer, работающий на 127.0.0.1 с SSL и NONSSL порты включены.

оказывается, что я получаю только заголовки из почты, но не тело ..

Спасибо за любые предложения, у нас отличный день!

+0

Это одно и то же серверное программное обеспечение, работающее как на портах SSL, так и на не-SSL? – Max

+0

Если вы включите отладку сеанса JavaMail, что показывает трассировка протокола? Какой тип сервера вы используете в каждом случае? –

+0

Я ответил в виде сообщения – Przunk

ответ

0

У меня проблема. Ошибка, с которой я столкнулся, связана с ошибкой «Невозможно загрузить BODYSTRUCTURE» (ссылки ниже - прочитать о сложности IMAP).

https://java.net/projects/javamail/pages/Exchange

http://www.oracle.com/technetwork/java/javamail/faq/index.html#imapserverbug

Все, что должно было быть сделано, чтобы получить соответствующее сообщение тела, создавал копию сообщения, используя MimeMessage конструктор.

// newMessages - it is array of messages from the mail inbox 
// create copy of the message using MimeMessage constructor 
MimeMessage message = new MimeMessage(newMessages[0]); // without it, the content was as in my first post 
// get content from the mssage 
Object messageContent = message.getContent(); 
// output it as a string 
System.out.println(messageContent.toString()); 

Проблема решена, теперь я получаю то, что хочу и что должен. Остается только одно: почему существует разница между содержимым сообщений SSL и NONSSL? Может быть, проблема с антивирусом?

Спасибо за помощь и интерес.

Отличный день.

Смежные вопросы