如果您阅读过本系列以前的任何博客,您可能会记得我正在开发一个小型但几乎具有工业实力的应用程序,该应用程序在日志文件中搜索异常。 您可能还记得,我现在有一个可以包含一堆结果的类,需要将其发送给感兴趣的任何人。 这将通过实现下面显示的简单Publisher界面来完成。

public interface Publisher { public <T> boolean publish(T report);
}

如果您还记得,那么要求是:

7 . Publish the report using email or some other technique.

在此博客中,我要处理需求的具体部分:通过电子邮件发送报告。 由于这是Spring应用程序,因此发送电子邮件的最简单方法是使用Spring的电子邮件类。 与Spring API的坚强后盾(模板类,例如JdbcTemplate和JmsTemplate)不同,Spring电子邮件类基于两个接口及其实现。 这些接口是:

  1. 邮件发件人
  2. JavaMailSender扩展MailSender
  3. 邮件留言

……实现是:

  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>

对于这个应用程序,这是发出自动报告的目的,我已经包括了两个弹簧豆: mailSendermailMessagemailSender是一个JavaMailSenderImpl实例,配置为使用特定的SMTP邮件服务器,并将所有其他属性(例如TCP端口)保留为默认值。

第二个春天bean是mailMessage ,实例SimpleMailMessage 。 这次,我已经预配置了三个属性:“至”,“来自”和“主题”。 这是因为,作为自动消息,这些值始终相同。

当然,您可以以编程方式配置这些,如果您要创建邮件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 ,这将全部转换为String

第二步是将电子邮件的正文附加到mailMessage ,然后发送使用消息mailSender.send(…)

最后一步是通过返回true来履行Publisher合同,除非电子邮件发送失败,在这种情况下,将记录异常并且返回值为false

在开发相关代码方面。 下一步是整理计划,以便按时生成报告,但稍后会更多……

  • 该博客的代码可在Github上找到: https : //github.com/roghughe/captaindebug/tree/master/error-track 。

如果您想查看本系列中的其他博客,请在这里看……

  1. 使用Spring跟踪应用程序异常
  2. 使用Spring跟踪异常–第2部分–委托模式
  3. 错误跟踪报告–第3部分–策略和软件包私有

翻译自: https://www.javacodegeeks.com/2014/04/tracking-exceptions-part-4-springs-mail-sender.html

跟踪异常–第4部分– Spring的邮件发件人相关推荐

  1. spring发邮件_跟踪异常–第4部分– Spring的邮件发件人

    spring发邮件 如果您阅读过本系列以前的任何博客,您可能会记得我正在开发一个小型但几乎具有工业实力的应用程序,该应用程序在日志文件中搜索异常. 您可能还记得,我现在有一个可以包含大量结果的类,这些 ...

  2. spring 异常捕获异常_跟踪异常–第5部分–使用Spring进行计划

    spring 异常捕获异常 看来我终于快要结束本系列有关使用Spring进行错误跟踪的博客了,对于那些还没有阅读该系列博客的人,我正在编写一个简单但几乎具有工业实力的Spring应用程序,扫描日志文件 ...

  3. 跟踪异常–第5部分–使用Spring进行计划

    看来我终于快要结束本系列有关使用Spring进行错误跟踪的博客了,对于那些还没有阅读该系列博客的人,我正在编写一个简单但几乎具有工业实力的Spring应用程序,扫描日志文件中的异常,然后生成报告. 在 ...

  4. spring 异常捕获异常_使用Spring跟踪异常–第2部分–委托模式

    spring 异常捕获异常 在上一个博客中 ,我开始谈论需要弄清您的应用程序在生产环境中是否行为异常. 我说过,监视应用程序的一种方法是检查其日志文件是否存在异常,如果发现异常,则采取适当的措施. 显 ...

  5. 使用Spring跟踪异常–第2部分–委托模式

    在上一个博客中 ,我开始谈论需要弄清楚您的应用程序在生产环境中是否行为异常. 我说过,监视应用程序的一种方法是检查其日志文件是否存在异常,如果发现异常,则采取适当的措施. 显然,日志文件会占用数百兆的 ...

  6. 使用Spring实现邮件发送

    2019独角兽企业重金招聘Python工程师标准>>> 这两天写个小程序需要使用邮件发送的功能,在网上搜索了一帮子文章,感觉还是使用Spring的邮件发送功能比较方便,哈哈,懒人就这 ...

  7. Spring Security使用出现 Encoded password does not look like BCrypt异常的解决以及Spring Securit加密方式的学习

    QUESTION:Spring Security使用出现 Encoded password does not look like BCrypt异常的解决以及Spring Securit加密方式的学习? ...

  8. spring boot 邮件端口_springboot集成qq邮件发送功能

    在很多业务中都存在着发送邮件的功能,邮件在国内不是经常使用但是在国外非常常用,废话少说,上代码! 首先先得开通smtp功能 进入qq邮箱>设置>账户>开启 获取授权码(待会要用) p ...

  9. smtplib python_伪造邮件发件人系列:一、python之smtplib库

    这两日用到了python的发送邮件功能,恰好又想起来wordpress发送给我的邮件都是形如wordpress@leniy.info 的虚拟地址,于是我就上网查找了下伪造邮件发件人的方案.网上这些资料 ...

最新文章

  1. Python(6)——Django之hello python模板视图
  2. Error response from daemon: Conflict. The container name /mysql is already in use by container
  3. SSM框架之MyBatis3专题5:MyBatis注解式开发
  4. pyqt5子窗口跳出主窗口_弹出式窗口与 可用性,转换和跳出率
  5. [NLP-CNN] Convolutional Neural Networks for Sentence Classification -2014-EMNLP
  6. Redis常见面试题详解
  7. 网页信息上传服务器,Unity 连接网页服务器 获取数据上传数据
  8. Mysql如何新建一个服务和移除所新建的服务
  9. dell 服务器ghost系统,Dell 5000笔记本装win7 64位Ghost系统真正成功教程
  10. 淘宝API 优惠券查询
  11. 怎样检测php语法错误,检查php的语法错误
  12. 4G模块的GPS定位差距过大
  13. 零基础学前端系列教程 | 和前端谈恋爱的第005天——约会账单
  14. 解决unable to find valid certification path to requested target
  15. dts,dtb,dtc
  16. 转载:mongo常规操作 大于/小于/不等于……
  17. matlab矩阵转入tecplot,[转载]tecplot编辑自己想要的变量
  18. [UE4]打包运行时提示Plugin ‘‘ failed to load because module ‘‘ could not be found.缺少插件解决方法
  19. Dicom 文件 转成 JPG 格式(批量处理)
  20. 【云原生之Docker实战】使用Docker部署Linux系统监控平台Netdata

热门文章

  1. android微信分享之创建工程以及启动微信
  2. html session 登录页面跳转页面跳转页面,session失效后跳转到登陆页面
  3. thinking-in-java(16) 数组
  4. java线程——什么是线程?
  5. JVM内存结构分析:为什么需要S0和S1?
  6. aws es方案_AWS Elasticsearch后模式
  7. 使用互联网了解的两个月里_我两个月来对Quarkus的了解
  8. java char类型空值_展望Java的未来:空值类型
  9. 纹理和基元_通过粘性仙人掌基元进行延迟加载和缓存
  10. lucene_Lucene组件概述