使用Spring跟踪应用异常(4)— 用Spring发送邮件,spring发送邮件
使用Spring跟踪应用异常(4)— 用Spring发送邮件,spring发送邮件
如果已经读过本系列前面几篇文章,可能记得我正在开发一个搜索异常日志文件的应用,它比较小但几乎具备工业级强度。你可能还记得我现在有一个包含一大堆结果的类,要发送这些结果给对它们感兴趣的人,做到这点需要实现Publisher接口。
public interface Publisher { public <T> boolean publish(T report); }
前面列出的需求:
7.用email或者其他技术发布报告
本篇博客将解决这个需求的具体实现:使用邮件发送报告。因为这是一个Spring应用,发送邮件最简单的方式就是使用Spring的邮件类。不同于Spring API的JdbcTemplate和JmsTemplate等模板类,Spring邮件类基于一些接口和实现类。这些接口包括:
1.MailSender
2.JavaMailSender继承MailSender
3.MailMessage
等,实现类包括:
1.JavaMailSenderImpl实现JavaMailSender
2.SimpleMailMessage实现MailMessage
小贴士:这些是“基础”类,你可以使用MimeMailMessage,MimeMailMessageHelper,ConfigurableMimeFileTypeMap和MimeMessagePreparator等类实现更加漂亮的、更复杂的邮件。
写代码之前,需要做项目配置。使用Spring的邮件类要在Maven POM文件中加入:
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency>
确保应用可以使用Java Mail相关类。
Java Mail相关类编译后,下一件事情就是Spring XML中作配置。
<!-- Spring mail configuration --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${mail.smtp.host}"/> </bean> <!-- this is a template message that we can pre-load with default state --> <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage"> <property name="to" value="${mail.to}"></property> <property name="from" value="${mail.from}"/> <property name="subject" value="${mail.subject}"/> </bean>
应用为实现自动发送报告加入了两个Spring bean:mailSender
和mailMessage
。mailSender
是JavaMailSenderImpl
的实例,具有特定的SMTP邮件服务器以及其他属性,比如使用默认配置的TCP端口。
第二个Spring bean是mailMessage
,它是SimpleMailMessage
的实例,这里配置了’to’,'from’和’subject’三个属性,因为这些自动生成的信息总是相同的。
当然也可以编程配置这些信息,如果创建邮件GUI可能要做其他事情。
有了所有这些XML配置,Publisher
的实现就非常简单。
@Service public class EmailPublisher implements Publisher { private static final Logger logger = LoggerFactory.getLogger(EmailPublisher.class); @Autowired private MailSender mailSender; @Autowired private SimpleMailMessage mailMessage; @Override public <T> boolean publish(T report) { logger.debug("Sending report by email..."); boolean retVal = false; try { String message = (String) report; mailMessage.setText(message); mailSender.send(mailMessage); retVal = true; } catch (Exception e) { logger.error("Can't send email... " + e.getMessage(), e); } return retVal; } }
Publisher
类有一个方法:publish
,泛型参数T report
,正如我前面已经说过的,它的类型必须与前面博客中Formatter
实现类返回参数的类型相同。
这段代码仅有三个步骤要考虑:首先泛型T
被转换为String
(需要考虑如果参数T report
不是String
的情况)。
第二步是将邮件内容附加到mailMessage
,然后用mailSender.send(…)
发送信息。
最后返回完成Publisher
的标志true
,如果邮件发送失败,异常记录在日志中,返回值为false
。
以上就是应用的代码。下一步为使日志信息条理清楚需要按时生成报告,更多内容请关注后续博客。
原文链接: javacodegeeks 翻译: Wld5.com - hejiani译文链接: http://www.wld5.com/11017.html
[ 转载请保留原文出处、译者和译文链接。]
用户点评