热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

基于SpringBoot实现定时发送邮件过程解析

这篇文章主要介绍了基于SpringBoot实现定时发送邮件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前提:

1.Springboot项目

2.引入maven 依赖

 
      org.springframework.boot
      spring-boot-starter-mail
    

以下代码中涉及到的maven依赖有日志依赖,但是springboot都有集成,不用重新引入依赖

Application(程序入口)

package com.springbootemaildemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
 * 引入了一个注解@EnableSwagger2来启动swagger注解。(启动该注解使得用在controller中的swagger注解生效, 覆盖的范围由@ComponentScan的配置来指定,
 * 这里默认指定为根路径”com.springboot”下的所有controller)
 * 也可以单独写衣swaggerConfigura
 */
@EnableScheduling //启动定时任务
@EnableSwagger2 //启动swagger注解
@SpringBootApplication
public class MailApplication {
  public static void main(String[] args) {
    SpringApplication.run(MailApplication.class, args);
  }
}

MailJob(定时任务类)

package com.springbootemaildemo.job;

import com.springbootemaildemo.send.SendMail;
import com.springbootemaildemo.send.TenSenvenMail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
@EnableScheduling
public class MailJob {
  private static final Logger logger = LoggerFactory.getLogger(MailJob.class);

  @Resource
  SendMail sendMail;

  @Resource
  TenSenvenMail tenSenvenMail;

  //@Scheduled(cron = "0/5 * * * * ?")
  //或直接指定时间间隔,例如:100秒
  // @Scheduled(fixedRate=100000)
  //早晨7点
  @Scheduled(cron = "0 0 7 * * ?")
  public void sendJob() {
    String bodyTen = "早安哇,太阳出来啦,记得开心哟";
    String bodyWen = "记得开心哟";
    logger.info("定时任务开始..........................");
    sendMail.sendWen(bodyWen);
    tenSenvenMail.sendTen(bodyTen);
    logger.info("定时任务结束..........................");
  }
}

@EnableScheduling 这个注解是 开启定时任务。

发送邮件代码:

发送普通的邮件(发送邮件类):

package com.springbootemaildemo.send;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;


@Component
public class SendMail {
  private static final Logger logger = LoggerFactory.getLogger(SendMail.class);

  public void sendWen(String body) {
    logger.info("开始发送..................");
    String from = "212212@qq.com";
    String to = "5456456@qq.com";
    String subject = "HAPPY";
    String smtpHost = "smtp.qq.com";
    Properties props = new Properties();
    props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
    props.setProperty("mail.smtp.host", smtpHost); // 发件人的邮箱的 SMTP服务器地址
    props.setProperty("mail.smtp.auth", "true"); // 请求认证,参数名称与具体实现有关

    // 创建Session实例对象
    Session session = Session.getDefaultInstance(props);
    // 创建MimeMessage实例对象
    MimeMessage message = new MimeMessage(session);
    // 设置发件人
    try {
      message.setFrom(new InternetAddress(from));
      // 设置收件人
      message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
      // 设置发送日期
      message.setSentDate(new Date());
      // 设置邮件主题
      message.setSubject(subject);
      // 设置纯文本内容的邮件正文
      message.setText(body);
      // 保存并生成最终的邮件内容
      message.saveChanges();
      // 设置为debug模式, 可以查看详细的发送 log
      session.setDebug(true);
      // 获取Transport对象
      Transport transport = session.getTransport("smtp");
      // 第2个参数需要填写的是QQ邮箱的SMTP的授权码,什么是授权码,它又是如何设置?
      transport.connect(from, "ipeiquufachheefg");
      // 发送,message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
      transport.sendMessage(message, message.getAllRecipients());
      logger.info("发送完成");
      transport.close();
    } catch (MessagingException e) {
      e.printStackTrace();
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • System Center Operations Manager 2007(简称SCOM 2007)作为MOM 2005的升级版,不仅整合了监控与管理功能,还显著简化了操作流程,提供了更加全面和精准的服务管理。 ... [详细]
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文探讨了一个Web工程项目的需求,即允许用户随时添加定时任务,并通过Quartz框架实现这些任务的自动化调度。文章将介绍如何设计任务表以存储任务信息和执行周期,以及如何通过一个定期扫描机制自动识别并加载新任务到调度系统中。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统上安装中文宋体字体的方法,包括操作系统的环境配置、字体管理工具的安装、字体文件的传输与缓存重建等步骤。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 使用jQuery与百度地图API实现地址转经纬度功能
    本文详细介绍了如何利用jQuery和百度地图API将地址转换为经纬度,包括申请API密钥、页面构建及核心代码实现。 ... [详细]
  • 本文探讨了在使用 MyBatis 进行批量数据处理时遇到的参数绑定异常问题,并提供了详细的解决方案。 ... [详细]
  • 本文详细介绍了如何在Windows和Linux系统上配置Openfire服务器,包括安装步骤、数据库配置及端口映射等关键环节。 ... [详细]
  • 初探Hadoop:第一章概览
    本文深入探讨了《Hadoop》第一章的内容,重点介绍了Hadoop的基本概念及其如何解决大数据处理中的关键挑战。 ... [详细]
  • 本文详细介绍了如何使用Linux下的mysqlshow命令来查询MySQL数据库的相关信息,包括数据库、表以及字段的详情。通过本文的学习,读者可以掌握mysqlshow命令的基本语法及其常用选项。 ... [详细]
  • PHP 图形函数中实现汉字显示的方法
    本文详细介绍了如何在 PHP 的图形函数中正确显示汉字,包括具体的步骤和注意事项,适合初学者和有一定基础的开发者阅读。 ... [详细]
  • 利用Docker部署JupyterHub以支持Python协同开发
    本文介绍了如何通过Docker容器化技术安装和配置JupyterHub,以实现多用户的Python开发环境,特别适合团队协作场景。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 在使用 MySQL 6.0.x 及以上版本的 JDBC 驱动时,若未正确配置 `serverTimezone` 参数,可能会导致连接异常。本文探讨了这一问题的原因及解决方法。 ... [详细]
author-avatar
丝兰郁香
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有