Java之——发邮件-QQ服务器认证(A secure connection is requiered(such as ssl))
2017-05-11 00:01
555 查看
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/71599014
Java发邮件的几种方式
JavaMail
Commons Email
Spring Mail
JavaMail是Java提供的发邮件API
Commons Email是Apache Commons下的发邮件API
spring Mail 是Spring提供的发邮件API
所需jar包
以Spring Mail发邮件为例
Spring配置文件如下
但当我们使用QQ邮箱尽心登陆,然后发邮箱时会报错,错误信息如下
503 Error
Java发邮件的几种方式
JavaMail
Commons Email
Spring Mail
JavaMail是Java提供的发邮件API
Commons Email是Apache Commons下的发邮件API
spring Mail 是Spring提供的发邮件API
所需jar包
<dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.5.5</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.2.4.RELEASE</version> </dependency>
以Spring Mail发邮件为例
Spring配置文件如下
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <!-- 加载mail.properties配置文件 --> <context:property-placeholder location="classpath:mail.properties" file-encoding="utf-8" ignore-unresolvable="true"/> <!-- mailSender配置 --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${mail.smtp.host}" /> <property name="username" value="${mail.smtp.username}" /> <property name="password" value="${mail.smtp.password}" /> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">${mail.smtp.auth}</prop> <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop> </props> </property> </bean> </beans>mail.properties配置文件如下
#------------------------------------------------------------ # 邮件服务的配置 #------------------------------------------------------------ #服务器 mail.smtp.host=smtp.xxx.com #是否需要验证密码 mail.smtp.auth=true #超时时间 mail.smtp.timeout=50000 #------------------------------------------------------------ # 对用户名和密码都进行了加密 #------------------------------------------------------------ #登陆用户名 mail.smtp.username=qBFXEAFr500QuCYz1D9/nw== #密码 mail.smtp.password=oqfyI44bbowwVRY0dSKX6yuDKF3s6J9K #发件人 mail.smtp.from=abcd@xxx.com #收件人 mail.smtp.to=ghi@xxx.com,jkl@xxx.com #抄送 #mail.smtp.cc=abc@xxx.com,def@xxx.com发邮件接口
package com.test.mail; public interface MailSender { public void sendMail(); }实现类
package com.test.mail.impl; import javax.mail.internet.MimeMessage; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; import com.test.mail.MailSender; import com.test.util.PropertiesUtil; /** * 采用Spring的JavaMailSender发邮件 * * @author gaowei.cheng 2015年12月23日 */ @Component public class SpringMail implements MailSender { private static Logger log = Logger.getLogger(SpringMail.class); //注入一个mailSender @Autowired JavaMailSenderImpl mailSender; public void sendMail() { //读取配置文件中的收件人 PropertiesUtil.readProperties("mail.properties"); String[] to = PropertiesUtil.getProperty("mail.smtp.to").split(",");// 收件人 String[] cc = PropertiesUtil.getProperty("mail.smtp.cc").split(",");// 收件人 MimeMessage mailMessage = mailSender.createMimeMessage(); log.info("发送邮件给" + PropertiesUtil.getProperty("mail.smtp.to")); try { MimeMessageHelper helper = new MimeMessageHelper(mailMessage, true, "utf-8"); helper.setFrom(propUtil.getProperty("mail.smtp.from"));// 设置发件人 helper.setTo(to);// 设置收件人 helper.setCc(cc);// 设置抄送 helper.setSubject("SpringMail测试");// 设置主题 helper.setText("这是一封来自SpringMail的测试邮件");// 邮件体 mailSender.send(mailMessage);// 发送邮件 log.info("邮件发送成功..."); } catch (Exception e) { log.error("邮件发送发生异常"); log.error(e.getMessage()); log.info("进行重发"); try { Thread.sleep(1000 * 1000); this.sendMail(); } catch (InterruptedException e1) { log.info("重发邮件发生异常"); log.error(e.getMessage()); e1.printStackTrace(); } } } }如果是自己公司内部的邮件服务器,这个程序是没有任何问题的。
但当我们使用QQ邮箱尽心登陆,然后发邮箱时会报错,错误信息如下
503 Error
Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28[/code]这是因为腾讯需要认证,才用平时的QQ邮箱用户名和密码已经不能登陆了。
解决办法
进入报错时,腾讯给的网址http://service.mail.qq.com/cgi-bin/help?id=28
就会进入客户端设置页面
什么是客户端?
答:在腾讯看来,所有不是通过腾讯页面或者客户端登陆的都属于客户端。
所以现在问题已经很清晰了,在我们用程序发送电子邮件的时候,我们的密码已经不能用了,需要采用腾讯的授权码登陆
如何获取授权码?
答:跟着腾序的帮助中心一步一步来!
授权码的获取
什么是授权码?
授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。
适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。
通过以上可以看出,我们的程序登陆,发邮件采用的是SMTP协议,所以就必须采用授权码登陆了。
如何获取?
登陆qq邮箱
1、进入设置
2、进入账户
3、下拉到这里
点击开启
按照操作一步一步开启
开启完成之后就会得到一个授权码
所有程序登陆都次啊用授权码登陆
而且mailSender也要进行相应的修改<!-- mailSender配置,qq需要SSL --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${mail.smtp.host}" /> <property name="port" value="${mail.smtp.port}" /> <property name="username" value="${mail.smtp.username}" /> <property name="password" value="${mail.smtp.password}" /> <property name="javaMailProperties"> <props> <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop> <prop key="mail.smtp.auth">${mail.smtp.auth}</prop> <prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop> <prop key="mail.smtp.socketFactory.port">${mail.smtp.port}</prop> <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> <prop key="mail.smtp.socketFactory.fallback">false</prop> </props> </property> </bean>其他配置信息如下#端口号,QQ邮箱需要使用SSL,端口号465或587 mail.smtp.port=465 #STARTTLS是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL) mail.smtp.starttls.enable=true mail.smtp.password=你的授权码
这样就可以登陆QQ邮箱发邮件了!
参考文献
http://wangcheng.iteye.com/blog/603908
http://blog.csdn.net/is_zhoufeng/article/details/12004073
相关文章推荐
- Java发邮件-QQ服务器认证(A secure connection is requiered(such as ssl))
- Java发邮件-QQ服务器认证(A secure connection is requiered(such as ssl))
- Java发邮件-QQ服务器认证(A secure connection is requiered(such as ssl))
- Java发邮件测试,QQ总是出现错误A secure connection is requiered(such as ssl). More information at
- 用Python发邮件,QQ邮件,解决(Error: A secure connection is requiered(such as ssl))
- 用qq邮箱做服务器发邮件失败,530 A secure connection is requiered(such as ssl)后解决方案如下
- A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bi
- 530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq
- 530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq
- Java HtmlEmail 使用QQ邮箱发送邮件报错 530 Error: A secure connection is requiered(such as ssl)
- A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28
- 使用javamail报出:530 Error: A secure connection is requiered(such as ssl). More information at http://se
- 530 Error: A secure connection is requiered(such as ssl).
- javaMail使用qq邮箱报错: 530 Error: A secure connection is requiered(such as ssl)
- javax.mail.AuthenticationFailedException: 530 Error: A secure connection is requiered(such as ssl).
- [置顶] javax.mail.AuthenticationFailedException: 530 Error: A secure connection is requiered(such as ssl).
- 530 A secure connection is requiered(such as ssl)
- javax.mail.AhenticationFailedException: 535 Err / A secure connection is requiered(java发邮件)
- Java发邮件-QQ服务器认证
- Java连接Mysql数据库警告:Establishing SSL connection without server's identity verification is not recommend