主要玩一下SpringBoot的定时任务和发送邮件的功能。定时发送邮件,这在实际生成环境下主要用户系统性能监控时,当超过设定的阙值,就发送邮件通知预警功能。这里只通过简单的写个定时结合邮件通知进行学习。
二、准备 添加maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--mail邮件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!--thymeleaf前端模板--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 配置文件application.yml spring: mail: #邮箱服务器地址 host: smtp.qq.com username: hulang6666@qq.com password: ********** default-encoding: UTF-8 mail: #以谁来发送邮件 fromMail: addr: hulang6666@qq.com这里的spring.mail.password为你的邮箱开启smtp服务需要设置客户端授权码,此处的password为你的验证密码。注意不是你的qq登录密码。
这里需要注意的一点是spring.mail.host为邮箱服务地址
常见的邮件服务器扩展(SMTP、POP3)地址、端口如下:
gmail(google.com)
POP3服务器地址:pop.gmail.com(SSL启用 端口:995)
SMTP服务器地址:smtp.gmail.com(SSL启用 端口:587)
Foxmail:
POP3服务器地址:pop.foxmail.com(端口:110)
SMTP服务器地址:smtp.foxmail.com(端口:25)
sina.com:
POP3服务器地址:pop3.sina.com.cn(端口:110)
SMTP服务器地址:smtp.sina.com.cn(端口:25)
163.com:
POP3服务器地址:pop.163.com(端口:110)
SMTP服务器地址:smtp.163.com(端口:25)
QQ邮箱
POP3服务器地址:pop.qq.com(端口:110)
SMTP服务器地址:smtp.qq.com(端口:25)
QQ企业邮箱
POP3服务器地址:pop.exmail.qq.com(端口:995)
SMTP服务器地址:smtp.exmail.qq.com(端口:587/465)
HotMail
POP3服务器地址:pop.live.com(端口:995)
SMTP服务器地址:smtp.live.com(端口:587)
sohu.com:
POP3服务器地址:pop3.sohu.com(端口:110)
SMTP服务器地址:smtp.sohu.com(端口:25)
我们使用html模板并且带有附件的例子。
MailService public interface MailService { void sendHtmlMail(String to, String subject, String content, String filePath); } MailServiceImpl @Component public class MailServiceImpl implements MailService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Resource private JavaMailSender mailSender; @Value("${mail.fromMail.addr}") private String from; /** * 发送html邮件 * @param to * @param subject * @param content */ @Override public void sendHtmlMail(String to, String subject, String content, String filePath) { MimeMessage message = mailSender.createMimeMessage(); try { //true表示需要创建一个multipart message MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true); // 判断是否带有附件 if (filePath != null) { FileSystemResource file = new FileSystemResource(new File(filePath)); String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); helper.addAttachment(fileName, file); } mailSender.send(message); logger.info("html邮件发送成功"); } catch (MessagingException e) { logger.error("发送html邮件时发生异常!", e); } } } 新增邮件模板sendMail.html
<!DOCTYPE html> <html lang="zh" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"/> <title>Title</title> </head> <body> <div> <div> <p><span th:text="${siteTitle}"></span>《<a target="_blank" th:href="${permalink}"><span th:text="${title}"></span></a>》一文有新的评论啦!</p> </div> <div> <p><span th:text="${author}"/> 于 <span th:text="${time}"/></p> <p> 在《<span th:text="${title}"/>》评论说:</p> <p><span th:text="${text}"/></p> <p>IP:<span th:text="${ip}"/>,邮箱:<span th:text="${mail}"/>,审核:<span th:text="${status}"/>。</p> <p>可登录<a th:href="${manage}" target=\'_blank\'>网站后台</a>管理评论。</p> </div> </div> </body> </html> 测试 @Test public void sendTemplateMail() { //创建邮件字段 Context context = new Context(); context.setVariable("siteTitle", "鸟不拉屎"); context.setVariable("permalink", "https://niaobulashi.com/archives/canteen.html/comment-page-1#comment-1152"); context.setVariable("title", "公司食堂伙食看起来还不错的亚子(体重有所回升)"); context.setVariable("author", "测试员"); context.setVariable("time", "2019-07-16 08:52:46"); context.setVariable("text", "真的很不错!"); context.setVariable("ip", "127.0.0.1"); context.setVariable("mail", "123321@qq.com"); context.setVariable("status", "通过"); context.setVariable("manage", "https://niaobulashi.com"); // 将字段加载到页面模板中 String emailContent = templateEngine.process("sendMail", context); // 添加附件 String filePath="E:\\workspace\\javaWorkspace\\spring-boot-learning\\spring-boot-21-schedule-mail\\doc\\test.log"; mailService.sendHtmlMail("hulang6666@qq.com","主题:这是模板邮件",emailContent, filePath); } 四、定时任务