背景
公司有个需求需要批量发送邮箱,但是每次短时间内频繁发送邮箱的时候总会报错
org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: [EOF];
nested exception is:
javax.mail.MessagingException: Can't send command to SMTP host;
nested exception is:
java.net.SocketException: Connection closed by remote host
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:440)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:361)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:356)
at org.zt.task.report.abs.AbstractProxyEmailGross.invoke(AbstractProxyEmailGross.java:76)
at org.zt.task.report.service.gross.impl.GrossSendEmailMsgLogServiceImpl.synSendEmail(GrossSendEmailMsgLogServiceImpl.java:150)
at org.zt.task.report.service.gross.impl.GrossSendEmailMsgLogServiceImpl.parseExcelAndSendEmail(GrossSendEmailMsgLogServiceImpl.java:128)
at org.zt.task.report.service.gross.impl.GrossSendEmailMsgLogServiceImpl.sendEmail(GrossSendEmailMsgLogServiceImpl.java:79)
at org.zt.task.report.listener.GrossProfitSendEmailLister.grossProfitSendEmail(GrossProfitSendEmailLister.java:65)
排查问题
首先看自己的配置是不是有问题,我这里用的是公司的腾讯企业微信邮箱
spring.mail.host=smtp.exmail.qq.com
spring.mail.username=公司企业微信账号
spring.mail.password=公司企业微信密码
spring.mail.port=587
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mime.splitlongparameters=false
spring.mail.default-encoding=utf-8
spring.mail.properties.smtp.socketFactory.port=993
spring.mail.properties.smtp.timeout=10000
这里我到处百度每个参数的作用,发现参数没什么问题
大家可以参考这个链接https://www.cnblogs.com/XingXiaoMeng/p/13531792.html
这是我在网上找到的具体的每个参数的含义
于是怀疑是邮箱限制,可能是频繁发送被关闭链接了。
解决方法
方法一:
刚开始尝试的是每次五封邮件让线程睡眠十分钟
发现还是有关闭链接的情况。
方法二:
每次发送一封邮件就让他睡眠三分钟,因为方法一可能存在某封邮件处理速度快,还是会导致频繁问题。
总结
一般这种报错如果不是配置问题,那就是邮箱发送频繁了。具体的邮箱发送上限限制也没有查到。也没时间去问企业微信客服,仅供参考~