Java Mail zu Exchange Server "keine Login-Methoden unterstützt"

Ich versuche zu implementieren Sie eine Java-servlet-Mail, der erste Schritt ist die Verbindung zum IMAP-server.

Ich bin in der Lage, ein telnet auf den server auf port 143 (Standard-port von IMAP), telnet sagt: OK The Microsoft Exchange IMAP4 service is ready.

Nun versuche ich die Verbindung zum server mit der Java-Mail-API wie diese:

Properties props = new Properties();
session = Session.getDefaultInstance(props, null);
store = session.getStore("imap");
store.connect("host","user","password");

Und ich bin in der Lage, eine Verbindung zu diesem server über eine bestehende Outlook-Webapp mit den gleichen Anmeldeinformationen ich bin versucht zu passieren, um es in java.

Aber laufen diese mit session.setDebug(true) erzeugt die folgende Ausgabe:

DEBUG: setDebug: JavaMail version 1.4.5
DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc]
DEBUG: mail.imap.fetchsize: 16384
DEBUG: mail.imap.statuscachetimeout: 1000
DEBUG: mail.imap.appendbuffersize: -1
DEBUG: mail.imap.minidletime: 10
DEBUG: trying to connect to host "myHost", 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: protocolConnect login, host=myHost, user=myUser, password=<non-null>
javax.mail.MessagingException: No login methods supported!;

EDIT:

Fügte ich prop.setProperty("mail.imap.starttls.enable", "true") wie vorgeschlagen.

Aber ich habe immer diese debug-Ausgabe:

DEBUG: setDebug: JavaMail version 1.4.5
DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc]
DEBUG: mail.imap.fetchsize: 16384
DEBUG: mail.imap.statuscachetimeout: 1000
DEBUG: mail.imap.appendbuffersize: -1
DEBUG: mail.imap.minidletime: 10
DEBUG: enable STARTTLS
DEBUG: trying to connect to host "myHost", 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: protocolConnect login, host=myHost, user=myUser, password=<non-null>
A1 STARTTLS
A1 OK Begin TLS negotiation now.
DEBUG IMAP: STARTTLS Exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Unter der Annahme, dass das war ein certificate problem, ich folgte diese Anweisungen und E-mail-server zu meinem cacerts-Datei. Das test-Programm enthalten, es lief ganz gut und ich konnte eine Verbindung mit einem SSL-url, aber ich habe immer noch die gleiche exception beim ausführen der java-mail-Klasse.

Ich auch versucht, die änderung auf "imaps" mit: session.getStore("imaps") (statt "imap") und war nicht einmal in der Lage, um die "Microsoft Exchange Server ist jetzt bereit" - Nachricht. Ich denke, weil es versucht, eine Verbindung auf port 993, wenn "imaps" angegeben wurde. Aber mit telnet auf port 993 zeigt keine Verbindung zum E-Mail-server.

Also das nächste ich habe versucht zu zwingen, das Programm für die Verwendung von SSL auf port 143 so:

//Use SSL
prop.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
prop.setProperty("mail.imap.socketFactory.fallback", "false");

//Use port 143
prop.setProperty("mail.imap.port", "143");
prop.setProperty("mail.imap.socketFactory.port", "143");

Nur zu erhalten, diese Ausnahme, also ich glaube nicht, will nichts zu tun mit SSL:

DEBUG: mail.imap.fetchsize: 16384
DEBUG: mail.imap.statuscachetimeout: 1000
DEBUG: mail.imap.appendbuffersize: -1
DEBUG: mail.imap.minidletime: 10
DEBUG: trying to connect to host "myHost", port 143, isSSL false
Not able to process the mail reading.
javax.mail.MessagingException: Unrecognized SSL message, plaintext connection?;

Könnte, dass TLS Ausnahme oben (DEBUG IMAP: STARTTLS Exception: javax.net.ssl.SSLHandshakeException:) kommen von TLS nicht aktiviert auf dem Exchange-Server?

Ich nicht bereit den Zugriff auf die e-mail-server, aber ich könnte wahrscheinlich jemanden, let me in.

LÖSUNG:

HulkingUnicorn Kommentar unter seiner Antwort darauf hingewiesen, diese Antwort was war die genaue Handhabung erforderlich. Anscheinend MS-Exchange-Server der dieses problem hat. Zusammen mit dem hinzufügen der Klasse aufgeführt, die Antwort auf mein Paket, habe ich einfach umgesetzt, meine E-mail-verbindungen, wie dies und alles war gut:

Properties prop = new Properties();
prop.setProperty("mail.imap.starttls.enable", "true");
prop.setProperty("ssl.SocketFactory.provider", "my.package.name.ExchangeSSLSocketFactory");
prop.setProperty("mail.imap.socketFactory.class", "my.package.name.ExchangeSSLSocketFactory");
session = Session.getDefaultInstance(prop, null);
session.setDebug(true);
store = session.getStore("imap");
store.connect("myHost","myUser","myPassword");

InformationsquelleAutor der Frage Geronimo | 2012-05-04

Schreibe einen Kommentar