前提
为了及时掌握采集系统的运行情况,我们简单开发了一个敏感值统计与邮件通知的程序。程序由两部分组成:一部分是敏感值统计,统计系统中的敏感值,比如采集的数据条数、新增的数据条数、各字段出现的次数等;一部分是邮件通知,将统计情况告知技术人员,方便出现异常时技术人员能及时介入处理。通知内容如下:
日检时间范围:2021-12-29 00:00:00-2021-12-29 23:59:59
============warn============
“银保监_消费者教育及风险提示”采集了328条数据,字段“source”值遗漏了268个
“银保监_行政监管措施”采集了432条数据,字段“source”值遗漏了248个
“消费保”采集了2400条数据,字段“投诉进程”值遗漏了8个
“微信”采集了600条数据,字段“digest”值遗漏了47个
============log============
“银保监_监管动态”采集了432条数据,其中新增数据有0条;采集数据的字段值统计:{"docId":432,"publish_time":432,"id":432,"source":432,"is_complete":432,"title":432,"content":432}
“银保监_政策解读”采集了432条数据,其中新增数据有0条;采集数据的字段值统计:{"spider_time":432,"docId":432,"publish_time":432,"id":432,"_id":432,"is_complete":432,"source":432,"title":432,"doc_id":432,"content":432}
“银保监_公告通知”采集了432条数据,其中新增数据有0条;采集数据的字段值统计:{"spider_time":432,"docId":432,"publish_time":432,"id":432,"_id":432,"is_complete":432,"source":432,"title":432,"doc_id":432,"content":432}
“银保监_新闻发布会及访谈”采集了144条数据,其中新增数据有0条;采集数据的字段值统计:{"spider_time":144,"docId":144,"publish_time":144,"id":144,"_id":144,"is_complete":144,"source":144,"title":144,"doc_id":144,"content":144}
......
本文主要介绍了程序中邮件通知功能的实现方案。
实现方案一:JavaMail
Maven
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
主要代码
Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp"); // 连接协议
properties.put("mail.smtp.host", "smtp.qq.com"); // 主机名
properties.put("mail.smtp.port", 465); // 端口号
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.ssl.enable", "true"); // 设置是否使用ssl安全连接,一般都使用
properties.put("mail.debug", "true"); // 设置是否显示debug信息,true会在控制台显示相关信息
// 得到回话对象
Session session = Session.getInstance(properties);
// 获取邮件对象
Message message = new MimeMessage(session);
// 设置发件人邮箱地址
message.setFrom(new InternetAddress("xxx@qq.com"));
// 设置收件人邮箱地址
message.setRecipient(Message.RecipientType.TO, new InternetAddress("xxx@qq.com")); // 一个收件人
// message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress("xxx@qq.com"), new InternetAddress("xxx@qq.com"), new InternetAddress("xxx@qq.com")}); // 多个收件人
// 设置邮件标题
message.setSubject("这是一封测试邮件");
// 设置邮件内容
message.setText("这是测试邮件的正文");
// 得到邮差对象
Transport transport = session.getTransport();
// 连接自己的邮箱账户
transport.connect("xxx@qq.com", "xxxxxx"); // 密码为QQ邮箱开通的stmp服务后得到的客户端授权码
// 发送邮件
transport.sendMessage(message, message.getAllRecipients());
transport.close();
实现方案二:JavaMailSender
Spring提供了非常好用的JavaMailSender接口实现邮件发送。
Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
主要代码
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost("smtp.qq.com");
javaMailSender.setPort(465);
javaMailSender.setUsername("xxx@qq.com");
javaMailSender.setPassword("xxxxxx");
javaMailSender.setDefaultEncoding("UTF-8");
Properties properties = new Properties();
properties.setProperty("mail.smtp.timeout", "30000");
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
javaMailSender.setJavaMailProperties(properties);
// 构建一个邮件对象
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
// true表示构建一个可以带附件的邮件对象
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
// 设置邮件主题
mimeMessageHelper.setSubject("这是一封测试邮件");
// 设置邮件发送者
mimeMessageHelper.setFrom("xxx@qq.com");
// 设置邮件接收者,可以有多个接收者
mimeMessageHelper.addTo("xxx@qq.com");
// 设置邮件抄送人,可以有多个抄送人
mimeMessageHelper.addCc("xxx@qq.com");
// 设置邮件隐秘抄送人,可以有多个隐秘抄送人
mimeMessageHelper.addBcc("xxx@qq.com");
// 设置邮件发送日期
mimeMessageHelper.setSentDate(new Date());
// 设置邮件的正文
mimeMessageHelper.setText("<p>这是测试邮件的正文</p>", true);
// 发送邮件
javaMailSender.send(mimeMessage);
补充
QQ邮箱客户端授权码
登录QQ邮箱,依次点击“设置”->“账户”->“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”即可获得授权码。