gpt4 book ai didi

java - SSL 与 javamail 不工作

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:52 26 4
gpt4 key购买 nike

尝试使用 TSL 连接到 gmail,我卡在了一些错误消息上。给出以下代码:

import java.util.*;
import java.util.logging.*;
import javax.mail.*;
import javax.mail.internet.*;

public class MailHandler extends Handler {
public void publish(LogRecord record) {
try {
String host = "smtp.gmail.com";
int port = 587;
String username = "cookie@gmail.com";
String password = "cookiepassword";

Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
//props.setProperty("mail.smtp.ssl.trust", "smtpserver");
props.put("mail.debug", "true");

Session session = Session.getInstance(props);

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("cookie@gmail.com"));
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("cookie@gmail.com"));
message.setSubject(record.getMessage());
message.setText("Auto");

Transport transport = session.getTransport("smtp");
transport.connect(host, port, username, password);

Transport.send(message);
} catch (MessagingException ex) {
Logger.getLogger(MailHandler.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void close() {}
@Override
public void flush() {}
}

我明白了

run:
DEBUG: JavaMail version 1.4.4
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.SMTPTransport,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 Microsystems, 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,smtps,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: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
220 mx.google.com ESMTP b5sm13118062wbh.4
DEBUG SMTP: connected to host "smtp.gmail.com", port: 587

EHLO FloWorkLinux
250-mx.google.com at your service, [95.146.161.196]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
09-Dec-2011 17:05:32 smsalertor.MailHandler publish
SEVERE: null
javax.mail.MessagingException: Could not convert socket to TLS;
nested exception is:
java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.DefaultSSLContextImpl)
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1880)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:648)
at javax.mail.Service.connect(Service.java:295)
at smsalertor.MailHandler.publish(MailHandler.java:33)
at smsalertor.SMSAlertor.main(SMSAlertor.java:107)
Caused by: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.DefaultSSLContextImpl)
at javax.net.ssl.DefaultSSLSocketFactory.throwException(SSLSocketFactory.java:196)
at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:216)
at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:432)
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1875)
... 4 more
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.DefaultSSLContextImpl)
at java.security.Provider$Service.newInstance(Provider.java:1262)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
at javax.net.ssl.SSLContext.getInstance(SSLContext.java:142)
at javax.net.ssl.SSLContext.getDefault(SSLContext.java:85)
at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:119)
at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:427)
... 5 more
Caused by: java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:392)
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:645)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55)
at java.security.KeyStore.load(KeyStore.java:1201)
at sun.security.ssl.TrustManagerFactoryImpl.getCacertsKeyStore(TrustManagerFactoryImpl.java:221)
at sun.security.ssl.DefaultSSLContextImpl.getDefaultTrustManager(DefaultSSLContextImpl.java:87)
at sun.security.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.java:57)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at java.lang.Class.newInstance0(Class.java:372)
at java.lang.Class.newInstance(Class.java:325)
at java.security.Provider$Service.newInstance(Provider.java:1238)
... 11 more
BUILD SUCCESSFUL (total time: 10 seconds)

取消注释 props.setProperty("mail.smtp.ssl.trust", "smtpserver"); 将其更改为

run:
DEBUG: JavaMail version 1.4.4
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.SMTPTransport,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 Microsystems, 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,smtps,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: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
220 mx.google.com ESMTP em4sm13086182wbb.20
DEBUG SMTP: connected to host "smtp.gmail.com", port: 587

EHLO FloWorkLinux
250-mx.google.com at your service, [95.146.161.196]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
09-Dec-2011 17:09:37 smsalertor.MailHandler publish
SEVERE: null
javax.mail.MessagingException: Could not convert socket to TLS;
nested exception is:
java.io.IOException: Can't create MailSSLSocketFactory
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1880)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:648)
at javax.mail.Service.connect(Service.java:295)
at smsalertor.MailHandler.publish(MailHandler.java:33)
at smsalertor.SMSAlertor.main(SMSAlertor.java:107)
Caused by: java.io.IOException: Can't create MailSSLSocketFactory
at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:421)
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1875)
... 4 more
Caused by: java.security.KeyStoreException: problem accessing trust storejava.io.EOFException
at sun.security.ssl.TrustManagerFactoryImpl.engineInit(TrustManagerFactoryImpl.java:75)
at javax.net.ssl.TrustManagerFactory.init(TrustManagerFactory.java:247)
at com.sun.mail.util.MailSSLSocketFactory$MailTrustManager.<init>(MailSSLSocketFactory.java:333)
at com.sun.mail.util.MailSSLSocketFactory$MailTrustManager.<init>(MailSSLSocketFactory.java:323)
at com.sun.mail.util.MailSSLSocketFactory.<init>(MailSSLSocketFactory.java:115)
at com.sun.mail.util.MailSSLSocketFactory.<init>(MailSSLSocketFactory.java:94)
at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:413)
... 5 more
BUILD SUCCESSFUL (total time: 7 seconds)

有人以前见过这个吗?

编辑:

谈论如何将 10 分钟的复制粘贴教程变成令人头疼的一整天。我仍然没有解决这个问题,但是,我一直在阅读越来越多的内容。显然,我需要一个公共(public) ssl 签名存储来进行比较。这应该位于 /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/security 的路径中。使用 sudo update-alternatives --config java 我将其指向 /usr/lib/jvm/java-6-sun/jre/bin/java 这反过来指向然而,在该文件夹中,还存在一个不受此影响的 /usr/lib/jvm/default-java 符号链接(symbolic link),当前指向 java-6-openjdk,如果我查看了那个文件夹,它缺少安全证书。 NetBeans 正在使用它。哦,快乐。

正在关注 this建议,我做了 sudo apt-get install libbcprov-java ,它给了我 openjdk 中的安全文件夹(在使用 sun-jdk 一段时间后,大概现在已经安装了,但谁知道呢其中,因为它没有出现在 /usr/lib/jvm/ 中)。

这仍然会产生相同的错误消息。因此我将它全部移到 Windows 上,尝试编译,结果发现上面的代码不太有效(对我们的目的来说无关紧要,因为非工作位在 SSL 位之后)(嘿,感谢所有不正确的教程到现在为止,真是一团糟)。无论如何,终于有了一些与 this 一起工作的东西解决方案(虽然那里有相当多的冗余,虽然它不是 TLS 而是 SSL,但是嘿,......)。无论如何,一切都很好,很顺利,所以回到 Ubuntu,叮咚,再次出现与上面相同的错误消息。显然看起来像是 KeyStore 周围的问题。我仍然不知道如何修复它(当前错误是上面提到的第一个错误)。

最佳答案

根据 keytool、truststore、cacerst 等尝试了数百个想法花了几天时间。但最后我不得不简单地设置 mail.smtp.ssl.trust 属性:

props.setProperty("mail.smtp.ssl.trust", "smtpserver");

关于java - SSL 与 javamail 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8449151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com