您的位置:首页 > 编程语言 > Java开发

用springmail写发送邮件服务和一个困扰我很久但是很简单的问题

2016-05-24 14:25 555 查看
         之前用spring Email做一个发送邮件的基础服务,然而困扰我很久的问题是,一旦邮件出现发送者错误啊,各种问题的话,整个线程就在javaMailSenderImpl.send(message)阻塞了,接下来就无法消费了。因为是一个分区对应一个线程去消费的,所以一个线程阻塞而且报错没进catch,所以整个线程阻塞了,没办法继续消费。

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。线程就不会阻塞。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: