Java mail无法使用tls或ssl连接到smtp

Java mail无法使用tls或ssl连接到smtp,java,email,smtp,jakarta-mail,Java,Email,Smtp,Jakarta Mail,0 我正在尝试从Java连接到邮件服务器。我已经能够使用相同的代码成功地从Java连接到许多邮件服务器,包括Gmail、Rackspace、GoDaddy和其他,但是无论我尝试什么设置,这个都不起作用 props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", this.outgoingHost);

0

我正在尝试从Java连接到邮件服务器。我已经能够使用相同的代码成功地从Java连接到许多邮件服务器,包括Gmail、Rackspace、GoDaddy和其他,但是无论我尝试什么设置,这个都不起作用

    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", this.outgoingHost);
    props.put("mail.smtp.port", 587);
    props.put("mail.smtp.ssl.trust", this.outgoingHost);
    session = Session.getInstance(props, new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    });
此操作失败,javax.mail.MessaginException:无法将套接字转换为TLS;嵌套异常为:javax.net.ssl.SSLException:无法识别的ssl消息,纯文本连接

我也试过,

    props.put("mail.smtp.host", this.outgoingHost);
    props.put("mail.smtp.port", 587);
    props.put("mail.smtp.socketFactory.port", 587);
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.ssl.trust", this.outgoingHost);
    session = Session.getInstance(props, new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    });
此操作失败,javax.mail.SendFailedException:无效地址;嵌套异常为:com.sun.mail.smtp.SMTPAddressFailedException:在端口587上提交邮件需要550 smtp身份验证

我还尝试了端口465,但它超时了

我能够从Thunderbird电子邮件客户端使用相同的smtp设置发送邮件(相同的主机/端口/用户/pw,但它一定在做其他事情)

使用JavaMail 1.51


有什么想法吗?

检查此链接以启用权限(如果发件人有谷歌电子邮件):

未经许可,您不能从非谷歌开发的应用程序登录

要登录,请仅使用邮件的域。例如:text@gmail.com->text

当您使用SSL(
smtps
)时,您不使用STARTTLS(
msa
),反之亦然。SSL默认为端口
465
,TLS默认为端口
587
。您可能还必须使用
mail.smtp.SSL.protocols
mail.smtps.SSL.protocols
设置SSL协议,以指定将为SSL/TLS连接启用的SSL协议。您最好避免覆盖
PasswordAuthentication
以发送凭据,并使用
SMTPTransport
connect
方法。另外,对于SSL,您必须为
mail.transport.protocol
使用
smtps
,并使用
mail.smtps
道具,而不是
mail.smtp
。我将提供SSL和TLS的示例

您可以使用
session.setDebug(true)
props.put(“mail.debug”,“true”)
在控制台中调试并查看整个通信;这将非常有帮助,因为您将看到与服务器的整个telnet通信

使用TLS(STARTTLS)
587
//设置debug以便查看与服务器的整个通信
props.put(“mail.debug”,“true”);
props.put(“mail.transport.protocol”、“smtp”);
道具放置(“mail.host”,outgoingHost);
props.put(“mail.smtp.auth”,“true”);
props.put(“mail.smtp.port”,“587”);
//启用STARTTLS
props.put(“mail.smtp.starttls.enable”、“true”);
//仅接受TLS 1.1和1.2
props.setProperty(“mail.smtp.ssl.protocols”、“TLSv1.1 TLSv1.2”);
Session Session=Session.getInstance(props,null);
session.setDebug(true);
//从会话创建SMTP传输
SMTPTransport=(SMTPTransport)session.getTransport(“smtp”);
//使用凭据连接到服务器
t、 连接(外出主机、用户名、密码);
//发送消息
t、 sendMessage(msg,msg.getAllRecipients());
使用STARTTLS的调试输出示例: 请注意,传输协议是
smtp

调试:JavaMail版本1.5.1 ... 调试:setDebug:JavaMail版本1.5.1 调试:getProvider()返回javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle] 调试SMTP:useEhlo true,useAuth true 调试SMTP:尝试连接到主机“mail.example.com”,端口587,isSSL false 220-srv.example.com ESMTP Exim 4.92#2 Wed,2020年3月18日15:55:56+0200 220我们不授权使用该系统来运输未经请求的货物, 220和/或批量电子邮件。 调试SMTP:已连接到主机“mail.example.com”,端口:587 EHLO host.docker.internal 250-srv.example.com你好ppp.home.provider.com[x.x.x.x] 250-8比特 250-流水线 250-AUTH普通登录 250-STARTTLS 250帮助 调试SMTP:找到扩展名“SIZE”,arg“52428800” 调试SMTP:找到扩展名“8BITMIME”,参数“” 调试SMTP:找到扩展名“管道”,arg“” 调试SMTP:找到扩展名“AUTH”,参数“普通登录” 调试SMTP:找到扩展名“STARTTLS”,arg“” 调试SMTP:找到扩展名“帮助”,参数“” STARTTLS 220 TLS继续 EHLO host.docker.internal 250-srv.example.com你好ppp.home.provider.com[x.x.x.x] 250号52428800 250-8比特 250-流水线 250-AUTH普通登录 250帮助 调试SMTP:找到扩展名“SIZE”,arg“52428800” 调试SMTP:找到扩展名“8BITMIME”,参数“” 调试SMTP:找到扩展名“管道”,arg“” 调试SMTP:找到扩展名“AUTH”,参数“普通登录” 调试SMTP:找到扩展名“帮助”,参数“” 调试SMTP:尝试使用以下机制进行身份验证:登录普通摘要-MD5 NTLM 调试SMTP:身份验证登录命令跟踪被抑制 调试SMTP:验证登录成功 调试SMTP:use8bit false 邮寄地址: 250行 RCPT至: 250接受 调试SMTP:已验证的地址 调试SMTP:otheruser@mail.com 资料 354输入消息,在一行上以“.”结尾 日期:2020年3月18日星期三15:55:57+0200(EET) 发件人:user@example.com 致:otheruser@mail.com 消息ID: 主题:来自JAVA的测试! MIME版本:1.0 内容类型:文本/纯文本;字符集=美国ascii码 内容传输编码:7bit X-Mailer:smtpsend 来自JAVA应用程序STARTTLS的消息! . 250正常id=1jEZAt-009Y7x-5Z 响应:250正常id=1jEZAt-009Y7x-5Z 退出 221 srv.example.com关闭连接 使用SSL
465
//设置debug以便查看与服务器的整个通信
props.put(“mail.debug”,“true”);
//协议的所有邮件道具都将是mail.smtps
//我们为SSL设置了smtps传输协议
props.put(“邮件、传输、协议”、“smtps”);
道具放置(“mail.host”,outgoingHost);
props.put(“mail.smtps.auth”、“true”);
props.put(“mail.smtps.port”,“465”);
props.put(“mail.smtps.ssl.trust”,outgoingHost);
props.put(“mail.smtps.ssl.enable”、“true”);
//仅接受TLS 1.1和1.2
props.setProperty(“mail.smtps.ssl.protocols”、“TLSv1.1 TLSv1.2”);
Session Session=Session.getInstance(props,null);
session.setDebug(true);
//从会话创建SMTP传输
SMTP