मैं smtp पर ईमेल भेजने के लिए जावा मेल का उपयोग कर रहा हूं। SMTP सेटिंग नीचे दिए गए:एसएसएल के बिना जावा मेल - PKIX पथ निर्माण विफल:
Properties props = new Properties();
Object put = props.put("mail.smtp.host", smtpHost);
props.put("mail.smtp.user", smtpUser);
props.put("mail.smtp.auth", true);
props.put("mail.debug", mailDebug);
props.put("mail.smtp.port", port);
smtp साख उपर्युक्त विवरण मेरी smtpHost को telnetting द्वारा सत्यापित किया गया है। हालांकि, जब मैं जावा मेल में उपर्युक्त सेटिंग्स का उपयोग करता हूं तो मुझे निम्न अपवाद मिलता है।
250-AUTH PLAIN LOGIN
250-STARTTLS
250 HELP
DEBUG SMTP: Found extension "SIZE", arg "52428800"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "HELP", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN failed
Nov 29, 2012 11:54:40 AM com.Test main
SEVERE: null
javax.mail.AuthenticationFailedException: 535 Incorrect authentication data
जब मैं पंक्ति जोड़ें:
props.put("mail.smtp.starttls.enable", false);
यह फिर से एक ही प्रमाणीकरण विफल अपवाद उत्पन्न करता है।
अगर मैं सेट mail.smtp.starttls.enableसच करने के लिए, प्रमाणीकरण सफल होता है, लेकिन मैं निम्नलिखित अपवाद: दूसरा अपवाद के बारे में विभिन्न मंच धागे अध्ययन करने के बाद
220 TLS go ahead
Nov 28, 2012 5:32:36 PM com.Test main
SEVERE: null
javax.mail.MessagingException: Could not convert socket to TLS;
nested exception is:
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
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1918)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:652)
at javax.mail.Service.connect(Service.java:317)
, मैंने सर्वर के स्वयं-हस्ताक्षरित प्रमाणपत्र लाने के लिए InstallCert प्रोग्राम चलाया। InstallCert निम्न अपवाद फेंकता है:
Opening connection to mydomain.com.au:443...
Starting SSL handshake...
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:542)
at sun.security.ssl.InputRecord.read(InputRecord.java:374)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:850)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1190)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1217)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1201)
at InstallCert.main(InstallCert.java:100)
Could not obtain server certificate chain
तो, लग रहा है अपने सर्वर की तरह ssl नहीं है, लेकिन STARTTLS सक्षम है। किसी एसएसएल वाले सर्वर पर STARTTLS के साथ मेल भेजने के लिए सही पैरामीटर क्या हैं?
मैं कोशिश की थी कि एक। एफएक्यू में वर्णित प्रयुक्त इंस्टॉलकर्ट, और मुझे अपवाद मिला "javax.net.ssl.SSLException: अपरिचित एसएसएल संदेश, सादा टेक्स्ट कनेक्शन?"। ऐसा लगता है कि मेरा सर्वर एसएसएल का उपयोग नहीं कर रहा है। – janenz00
इंस्टॉलकर्ट अपवाद के साथ भी मेरा प्रश्न संपादित किया। – janenz00
इंस्टॉलकर्ट के साथ समस्या यह है कि यह केवल तभी काम करता है जब आप एसएसएल कनेक्शन शुरू कर सकें। यदि आपका सर्वर केवल सादा पाठ कनेक्शन का समर्थन करता है जो एसएसएल (टीएलएस) कनेक्शन में परिवर्तित हो जाते हैं, तो InstalCert मदद नहीं करेगा। आप [MailSSLSocketFactory] (http://javamail.kenai.com/nonav/javadocs/com/sun/mail/util/MailSSLSocketFactory.html) कक्षा को देखना चाहते हैं, जो आपके लिए स्वयं हस्ताक्षरित करने में आसान बनाता है प्रमाण पत्र जो अन्यथा सत्यापित नहीं करेंगे। –