本文主要是介绍springboot集成javax mail第三方邮件功能避坑,javax.mail.MessagingException: Exception reading response,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
springboot集成javax mail使用第三方发送邮件时存在各种各样的异常,正常流程大概如下:
1. 邮箱开通smtp功能(以126邮箱为例)
2. 项目pom文件导入依赖
导入以下几个依赖时会报错
Exception in thread "main" java.lang.NoSuchMethodError: com.sun.mail.util.TraceInputStream.<init>(Ljava/io/OutputStream;Lcom/sun/mail/util/MailLogger;)V
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-email</artifactId><version>1.5</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.6.2</version></dependency>
考虑使用spring-boot的起步依赖后改为导入以下依赖,成功不报异常
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-email</artifactId><version>1.5</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>
也就是用spring-boot的起步依赖替换activation以及javax.mail-api两个依赖;
3. 编写发送邮件的接口
@Service
public class SendCodeImpl implements SendCode {@AutowiredEmailInfoConfig emailInfoConfig;/*** @param address 接收邮件的邮箱地址* @param code 外部传入的随机生成的验证码* @return*/@Overridepublic Boolean sendCode(String address, String code) {HtmlEmail send = new HtmlEmail();try {send.setSocketConnectionTimeout(25000);send.setHostName("smtp.sina.com");send.setCharset("utf-8");//第一个参数是发送者的Eamil 第二个参数是发送者昵称send.setFrom("xxxxx@sina.com", "zhangsan");//第一个参数是发送者的Eamil 第二个参数是开通邮箱smtp功能时获取的授权码send.setAuthentication("xxxxx@sina.com", "xxxxxxxxxx");// 接收者的邮箱send.addTo(address);//Eamil的标题send.setSubject("xxx给您送上验证码");//Eamil的内容send.setMsg("欢迎光临,特此送上验证: " + code + " 请您签收");// 邮箱第三方使用的端口send.setSmtpPort(25); // 邮箱第三方使用的端口//send.setSSLCheckServerIdentity(true); // 开启SSL加密send.send(); //发送} catch (EmailException e) {e.printStackTrace();}return new Boolean(true);}
}
此处可能会报异常
org.springframework.mail.MailSendException: Failed messages: javax.mail.MessagingException: Exception reading response (java.net.SocketTimeoutException: Read timed out)
经过尝试,qq邮箱与126邮箱都会报该异常,换用以上的sina邮箱后不报异常,遇到该异常时多换用不同邮箱,不一定哪个邮箱就一定有效。
这篇关于springboot集成javax mail第三方邮件功能避坑,javax.mail.MessagingException: Exception reading response的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!