用springmail写发送邮件服务和一个困扰我很久但是很简单的问题
2016-05-24 14:25
555 查看
之前用spring Email做一个发送邮件的基础服务,然而困扰我很久的问题是,一旦邮件出现发送者错误啊,各种问题的话,整个线程就在javaMailSenderImpl.send(message)阻塞了,接下来就无法消费了。因为是一个分区对应一个线程去消费的,所以一个线程阻塞而且报错没进catch,所以整个线程阻塞了,没办法继续消费。
解决方法:把MessagingException改成Exception就可以成功接到Exception。线程就不会阻塞。
Properties javaMailProperties=new Properties(); javaMailProperties.put("mail.smtp.auth", true); javaMailProperties.put("mail.smtp.starttls.enable", true); javaMailSenderImpl.setHost(mailHost); javaMailSenderImpl.setPassword(password); javaMailSenderImpl.setUsername(username); javaMailSenderImpl.setPort(587); javaMailSenderImpl.setDefaultEncoding("UTF-8"); javaMailSenderImpl.setJavaMailProperties(javaMailProperties); MimeMessage message = javaMailSenderImpl.createMimeMessage(); MimeMessageHelper helper=new MimeMessageHelper(message); logger.info("发送邮件服务器:"+mailHost+",邮箱密码:"+password+",邮件发送者:"+username); try { helper.setTo(to); helper.setFrom(from); helper.setText(content,true); helper.setSubject(subject); logger.info("邮件发给"+from+",邮件接收"+to+",邮件主题:"+subject+",邮件内容:"+content); javaMailSenderImpl.send(message); logger.info("邮件发送成功"); EmailSmsHistory history=EmailSmsHistoryUtil.initEntity(userId,mvnoId,to,receiveId,templateId,content); history.setSendWay(SEND_WAY_EMAIL); history.setSendResult(SEND_RESULT_SUCCESS); history.setMsisdnSend(from); history.setSubject(subject); emailSmsHistorySerivce.insertHistory(history); } catch (MessagingException e) { logger.error("邮件发送失败!邮件发给"+from+",邮件接收"+to+",邮件主题:"+subject+",邮件内容:"+content); EmailSmsHistory history=EmailSmsHistoryUtil.initEntity(userId,mvnoId,to,receiveId,templateId,content); history.setSendWay(SEND_WAY_EMAIL); history.setSendResult(SEND_RESULT_FAIL); history.setMsisdnSend(from); history.setSubject(subject); emailSmsHistorySerivce.insertHistory(history); e.printStackTrace(); //如果发送失败,杀掉当前线程 // Thread.currentThread().interrupt(); }后来调试发现之所以没进到catch是因为它抛出的不是MessagingException,所以catch不到。
解决方法:把MessagingException改成Exception就可以成功接到Exception。线程就不会阻塞。
相关文章推荐
- java中的@repository什么意思?
- java统计字符串单词的个数
- Spring + Struts2 + Hibernate整合
- Spring缓存注解@Cache使用
- java高级教程
- Spring MVC默认欢迎页面的配置方法
- 异步请求,当请求的方法返回值为 java关键字 null 时,报error
- JAVA学习笔记三之(3)语句②
- Java中的序列化
- JFrame,JPanel,JLabel详解
- leetcode 14 4000 :Longest Common Prefix
- Java常见内存溢出(OOM)解决方案
- 编写一个Java程序,计算半径为3.0的圆周长和面积并输出结果
- Java数组详解
- java实现DES算法
- Java反射和注解
- jdk源码分析之ArrayList
- Java中json的使用-7种开源库介绍与比较
- MyEclipse断点调试时无法进入源文件的问题解决方案
- Java自定义异常