2016-04-08 15 views
2

Senden Bei der Verwendung von Java Mail eine Nachricht über SMTP senden (+ STARTTLS) die folgende Ausnahme ausgelöst:bekommen "MessagingException: nicht Socket TLS umwandeln könnte", wenn E-Mails über SMTP

javax.mail.MessagingException: Could not convert socket to TLS; 
nested exception is: 
javax.net.ssl.SSLException: java.lang.ArrayIndexOutOfBoundsException 

Multiple Beiträge hier (auf Stackoverflow) und anderswo deuten darauf hin, dass einige Eigenschaften für die Mail-Transport-Sitzung, nämlich

props.put("mail.smtp.starttls.enable","true"); 
props.put("mail.smtp.ssl.trust","*"); 

bei der Lösung dieses Problems eine Rolle spielen, aber ich habe alle Kombinationen ausprobiert dieser Parameter (anwesend/abwesend), und keiner von ihnen löst das Problem.

Hat jemand eine Idee, wie man das beheben kann?


Zusätzliche Informationen/Einzelheiten:

Java-Version: 1.6.0

Javamail Version: 1.5.2

Eigenschaften für Mail-Transport-Sitzung:

props.put("mail.transport.protocol","smtp"); 
props.put("mail.smtp.host","XXX"); 
props.put("mail.smtp.port","587"); 
props.put("mail.smtp.auth","true"); 
props.put("mail.smtp.starttls.enable","true"); 
props.put("mail.smtp.ssl.trust","*"); 
props.put("mail.smtp.user","XXX"); 
props.put("mail.smtp.password","XXX"); 
props.put("mail.smtp.connectiontimeout","60000"); 
props.put("mail.smtp.timeout","600000"); 
props.put("mail.smtp.writetimeout","60000"); 

Debug-Ausgabe von JavaMail (bevor Ausnahme ausgelöst wird):

DEBUG: JavaMail version 1.5.2 
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers 
DEBUG: Tables of loaded providers 
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp. 
MTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Mi 
rosystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]} 
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT, 
mtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax 
mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]} 
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map 
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] 
DEBUG SMTP: need username and password for authentication 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: trying to connect to host "XXX", port 587, isSSL false 
220 bsmtp.bon.at ESMTP (1) 
DEBUG SMTP: connected to host "XXX", port: 587 
EHLO ZZZ 
250-bsmtp.bon.at 
250-PIPELINING 
250-SIZE 104857600 
250-ETRN 
250-STARTTLS 
250-ENHANCEDSTATUSCODES 
250 8BITMIME 
DEBUG SMTP: Found extension "PIPELINING", arg "" 
DEBUG SMTP: Found extension "SIZE", arg "104857600" 
DEBUG SMTP: Found extension "ETRN", arg "" 
DEBUG SMTP: Found extension "STARTTLS", arg "" 
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" 
DEBUG SMTP: Found extension "8BITMIME", arg "" 
STARTTLS 
220 2.0.0 Ready to start TLS 

Vollstacktrace für die Ausnahme:

javax.mail.MessagingException: Could not convert socket to TLS; 
    nested exception is: 
    javax.net.ssl.SSLException: java.lang.ArrayIndexOutOfBoundsException 
    at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1999) 
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:709) 
    at javax.mail.Service.connect(Service.java:386) 
    at javax.mail.Service.connect(Service.java:245) 
    at javax.mail.Service.connect(Service.java:194) 
    at com.safebook.MailMessage.send(MailMessage.java:144) 
    at com.safebook.MailMessage.send(MailMessage.java:80) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
    at java.lang.reflect.Method.invoke(Method.java:611) 
    at com.ibm.jscript.types.JavaAccessObject.call(JavaAccessObject.java:321) 
    at com.ibm.jscript.types.FBSObject.call(FBSObject.java:161) 
    at com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:197) 
    at com.ibm.jscript.ASTTree.ASTAssign.interpret(ASTAssign.java:91) 
    at com.ibm.jscript.ASTTree.ASTBlock.interpret(ASTBlock.java:100) 
    at com.ibm.jscript.ASTTree.ASTTry.interpret(ASTTry.java:109) 
    at com.ibm.jscript.std.FunctionObject._executeFunction(FunctionObject.java:261) 
    at com.ibm.jscript.std.FunctionObject.executeFunction(FunctionObject.java:185) 
    at com.ibm.jscript.std.FunctionObject.call(FunctionObject.java:171) 
    at com.ibm.jscript.types.FBSObject.call(FBSObject.java:161) 
    at com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:197) 
    at com.ibm.jscript.ASTTree.ASTIf.interpret(ASTIf.java:85) 
    at com.ibm.jscript.ASTTree.ASTProgram.interpret(ASTProgram.java:119) 
    at com.ibm.jscript.types.FBSGlobalObject$GlobalMethod.call(FBSGlobalObject.java:280) 
    at com.ibm.jscript.types.FBSObject.call(FBSObject.java:161) 
    at com.ibm.jscript.types.FBSGlobalObject$GlobalMethod.call(FBSGlobalObject.java:219) 
    at com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:197) 
    at com.ibm.jscript.ASTTree.ASTBlock.interpret(ASTBlock.java:100) 
    at com.ibm.jscript.ASTTree.ASTTry.interpret(ASTTry.java:109) 
    at com.ibm.jscript.ASTTree.ASTProgram.interpret(ASTProgram.java:119) 
    at com.ibm.jscript.ASTTree.ASTProgram.interpretEx(ASTProgram.java:139) 
    at com.ibm.jscript.JSExpression._interpretExpression(JSExpression.java:435) 
    at com.ibm.jscript.JSExpression.access$1(JSExpression.java:424) 
    at com.ibm.jscript.JSExpression$2.run(JSExpression.java:414) 
    at java.security.AccessController.doPrivileged(AccessController.java:448) 
    at com.ibm.jscript.JSExpression.interpretExpression(JSExpression.java:410) 
    at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:251) 
    at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:234) 
    at com.ibm.xsp.javascript.JavaScriptInterpreter.interpret(JavaScriptInterpreter.java:222) 
    at com.ibm.xsp.binding.javascript.JavaScriptMethodBinding.invoke(JavaScriptMethodBinding.java:111) 
    at com.ibm.xsp.component.UIViewRootEx.initBeforeContents(UIViewRootEx.java:1621) 
    at com.ibm.xsp.page.compiled.AbstractCompiledPage.initComponent(AbstractCompiledPage.java:333) 
    at com.ibm.xsp.page.compiled.AbstractCompiledPage.createTree(AbstractCompiledPage.java:256) 
    at com.ibm.xsp.page.compiled.AbstractCompiledPage.createViewRoot(AbstractCompiledPage.java:167) 
    at com.ibm.xsp.application.ViewHandlerExImpl._createViewRoot(ViewHandlerExImpl.java:521) 
    at com.ibm.xsp.application.ViewHandlerExImpl.createViewRoot(ViewHandlerExImpl.java:567) 
    at com.ibm.xsp.application.ViewHandlerExImpl.doCreateView(ViewHandlerExImpl.java:142) 
    at com.ibm.xsp.application.ViewHandlerEx.createView(ViewHandlerEx.java:90) 
    at com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:251) 
    at com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157) 
    at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160) 
    at com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138) 
    at com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103) 
    at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576) 
    at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335) 
    at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:853) 
    at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:796) 
    at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565) 
    at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1319) 
    at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662) 
    at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482) 
    at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357) 
    at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313) 
    at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272) 
Caused by: 
javax.net.ssl.SSLException: java.lang.ArrayIndexOutOfBoundsException 
    at com.ibm.jsse2.o.a(o.java:26) 
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:340) 
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:225) 
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:367) 
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:32) 
    at com.ibm.jsse2.SSLSocketImpl.startHandshake(SSLSocketImpl.java:95) 
    at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:543) 
    at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:480) 
    at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1994) 
    ... 64 more 
Caused by: 
java.lang.ArrayIndexOutOfBoundsException 
    at com.ibm.crypto.provider.yc.a(Unknown Source) 
    at com.ibm.crypto.provider.yc.a(Unknown Source) 
    at com.ibm.crypto.provider.yc.a(Unknown Source) 
    at com.ibm.crypto.provider.TlsMasterSecretGenerator.engineGenerateKey(Unknown Source) 
    at javax.crypto.KeyGenerator.generateKey(Unknown Source) 
    at com.ibm.jsse2.kb.b(kb.java:114) 
    at com.ibm.jsse2.kb.a(kb.java:138) 
    at com.ibm.jsse2.lb.a(lb.java:113) 
    at com.ibm.jsse2.lb.a(lb.java:120) 
    at com.ibm.jsse2.kb.t(kb.java:227) 
    at com.ibm.jsse2.kb.a(kb.java:425) 
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:785) 
    at com.ibm.jsse2.SSLSocketImpl.h(SSLSocketImpl.java:675) 
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:669) 
    ... 68 more 

Antwort

1

Sieht aus wie etwas schief geht in die SSL-Unterstützung JDK. Vielleicht ist etwas an dem Zertifikat vom Server verwirrend. Sie verwenden eine ziemlich alte Version des JDK. Ich würde versuchen, auf eine aktuelle Version zu aktualisieren, um zu sehen, ob das das Problem löst. Sie können auch versuchen, einige der Low-Level-SSL-Debugging-Ausgabe im JDK zu aktivieren, wie in den Links in der JavaMail SSLNOTES.txt beschrieben.

+0

Danke für Ihre Antwort. Ich weiß, dass Java 6 Probleme mit SSL hat, insbesondere weil TLS> 1.0 nicht unterstützt wird. Da ich jedoch per SMTPS Mails versenden kann, habe ich mich gewundert, warum es nicht mit SMTP + STARTTLS funktionieren würde. Ich dachte, dass die Verwendung von STARTTLS nur bedeutet, dass es eine unverschlüsselte Verhandlung darüber gibt, ob SSL verwendet werden soll oder nicht, und wenn beide Seiten zustimmen, wird die nachfolgende Datenübertragung genauso wie bei SMPTS verschlüsselt. Offensichtlich ist es nicht so einfach ... –

+0

Ich habe genau die gleiche Sende-Routine mit Java 7 ausgeführt, und es funktioniert einwandfrei. Vielen Dank für Ihre Hilfe und im Allgemeinen dank Ihnen (und Ihren JavaMail-Entwicklern), dass Sie der Community eine so großartige Mailing-Bibliothek zur Verfügung gestellt haben. –