javamail验证邮箱密码/发件时报错javax.mail.AuthenticationFailedException: STLS required but not supported

我们在开发一个陌生的程序时,很多时候,都是上网找demo,然后改改为自己所用,但有时demo里写的却不是支持所有情况的。

例如我在网上找的利用javamail发送邮件,我们是做一个类似网页端收发件的第三方邮箱,可以作为绑定其他邮箱的邮件系统。当用邮箱和密码绑定邮箱时,报错如下:

javax.mail.AuthenticationFailedException: STLS required but not supported
    at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:213)
    at javax.mail.Service.connect(Service.java:388)
    at javax.mail.Service.connect(Service.java:246)
    at javax.mail.Service.connect(Service.java:267)

问题出现原因:在连接pop3协议时,STLS需要但不被支持;

解决办法:在连接pop3协议时,不要添加以下两个属性:

props.setProperty("mail.pop3.starttls.enable", encryptionTransmissionFlag);

 props.setProperty("mail.pop3.starttls.required", encryptionTransmissionFlag);

例如如下代码,我的这两句是注释掉的。在我的项目里encryptionTransmissionFlag这个字段是指是否勾选“STARTTLS加密传输”这个选项。也就是说该邮箱的pop3协议,不支持“STARTTLS加密传输”。下面对这个字段进行解释如下,从foxmail上截的图。

if("pop3".equals(receiveServerType)) {
		    	props.setProperty("mail.pop3.port", receiveServerPort); // 收件端口 勾选了SSL(即SSL加密)则为995否则为110
		        props.setProperty("mail.pop3.host", receiveServerAddress);// 收件pop3服务器   例如:pop.163.com
		        if("true".equals(receiveServerSslFlag)) {//收件服务器是否勾选了SSL
		        	 props.setProperty("mail.pop3.socketFactory.class","javax.net.ssl.SSLSocketFactory");
		        	 props.setProperty("mail.pop3.socketFactory.fallback", "false");
		        }
		        props.setProperty("mail.pop3.ssl.enable", receiveServerSslFlag);
		        props.setProperty("mail.pop3.auth", "true");
//		        props.setProperty("mail.pop3.starttls.enable", encryptionTransmissionFlag);
//		        props.setProperty("mail.pop3.starttls.required", encryptionTransmissionFlag);
		        
		    }else {
		    	props.setProperty("mail.imap.port", receiveServerPort); // 端口  993
		        props.setProperty("mail.imap.host", receiveServerAddress);// imap服务器  
		        if("true".equals(receiveServerSslFlag)) {
		        	props.setProperty("mail.imap.socketFactory.class","javax.net.ssl.SSLSocketFactory");  
			        props.setProperty("mail.imap.socketFactory.fallback", "false");
		        }
		        props.setProperty("mail.imap.auth", "true");
		        props.setProperty("mail.imap.ssl.enable", receiveServerSslFlag);
		        props.setProperty("mail.imap.starttls.enable", encryptionTransmissionFlag);
		        props.setProperty("mail.imap.starttls.required", encryptionTransmissionFlag);
		    }
		    props.setProperty("mail.store.protocol",receiveServerType); // 收件协议 例如 pop3  
		    props.setProperty("mail.transport.protocol", "smtp");//发件协议"smtp"
			props.setProperty("mail.smtp.host", sendServerAddress);// smtp.qq.com
			props.setProperty("mail.smtp.port", SendServerPort);// 465
			props.setProperty("mail.smtp.auth", SendServerSslFlag);// "true"
		    props.setProperty("mail.debug", "true");// "true"  控制台打印发邮件日志
	        if("true".equals(SendServerSslFlag)) {
	        	props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
	        	props.setProperty("mail.smtp.socketFactory.fallback", "false");
	        } 

encryptionTransmissionFlag字段代表的含义就是图中标红的复选框是否勾选。当encryptionTransmissionFlag=true时勾选,false时不勾选。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值