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

         之前用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。线程就不会阻塞。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值