异步发送邮件出现的异常情况
1、问题描述
近期做了一个发送邮件的功能,因为在处理发送邮件联系人上出现过失效的邮箱地址,为了快速定位到问题。现将批量发送的方式改为单独发送。
Failed messages: javax.mail.MessagingException: IOException while sending message;
nested exception is:
java.io.FileNotFoundException: /tmp/tomcat.8268785341862084524.9500/work/Tomcat/localhost/ROOT/upload_6a6103a9_6094_4778_9ff1_a3211bcf4d9b_00026217.tmp (No such file or directory)
2、异常产生原因
由于我在发送邮件的方法上加了@Async异步制定方法的注解,所以在发送带有附件邮件的时候会直接在sprin-tomcat里读取临时的流到file中,而当@Async异步执行一次后会直接将流给关闭,其他在循环中调用该方法时会取不到这个临时的流,所以导致报出现在的这个异常情况。
3、改进方法:
3.1、在发送邮件的方法上去掉@Async注解(优:改动快不必要动其他代码;缺:加大发送邮件的时间占用大量资源,导致发送效率下降)
3.2、提供一个识别失效邮箱的方法,将邮件地址以逗号隔开一次性发送全部邮件
3.3、将邮件附件存放在一个物理地址,服务器上或者阿里云上