美文网首页
定时发送邮件(定时任务、cron表达式)

定时发送邮件(定时任务、cron表达式)

作者: 黑桃_06ea | 来源:发表于2019-04-17 18:00 被阅读0次

    一、

    • 首先配置QQ邮箱->设置->账户->开启服务POP3/SMTP开启->获取授权码


      qqyouxiang.png
    • pom.xml中添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    
    • 配置application.properties
    spring.mail.host=smtp.qq.com
    spring.mail.username=623878638@qq.com
    spring.mail.password=tnvargwcssxpbegf
    spring.mail.default-encoding=UTF-8
    ##如果不加下面3句,会报530错误
    spring.mail.properties.mail.smtp.auth=true
    spring.mail.properties.mail.smtp.starttls.enable=true
    spring.mail.properties.mail.smtp.starttls.required=true
    
    • Service接口
    package com.soft1721.jianyue.api.service;
    
    /**
     * Created by wj on 2019/4/15.
     */
    public interface MailService {
        /**
         * 发送简单邮件
         */
        void sendMail(String to,String subject,String content);
    }
    
    • 实现接口ServiceImpl
    import com.soft1721.jianyue.api.service.MailService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.stereotype.Service;
    /**
     * Created by wj on 2019/4/15.
     */
    @Service("mailService")
    public class MailServiceImpl implements MailService {
        @Autowired
        private JavaMailSender mailSender;
        @Override
        public void sendMail(String to, String subject, String content) {
            SimpleMailMessage mailMessage=new SimpleMailMessage();
            mailMessage.setFrom("623878638@qq.com");//发起者
            mailMessage.setTo(to);//接受者
            mailMessage.setSubject(subject);
            mailMessage.setText(content);
            try {
                mailSender.send(mailMessage);
                System.out.println("发送简单邮件");
            }catch (Exception e){
                System.out.println("发送简单邮件失败");
            }
        }
    }
    
    • 写定时任务:10:00准时发送一份电子邮件
    import com.soft1721.jianyue.api.service.MailService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Service;
    /**
     * Created by wj on 2019/4/15.
     */
    @Service
    //@Async
    public class TaskService {
        @Autowired
        private MailService mailService;
        @Scheduled(cron = "0 0 10 * * ?")
        public void proces(){
            mailService.sendMail("*********@qq.com","title","定时10:00发送");
            System.out.println("111");
        }
    }
    
    • 运行Application

    二、

    • cron表达式
      1、Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:

    Seconds Minutes Hours DayofMonth Month DayofWeek Year或
    Seconds Minutes Hours DayofMonth Month DayofWeek

    2、每一个域可出现的字符如下:

    Seconds:可出现", - * /"四个字符,有效范围为0-59的整数
    Minutes:可出现", - * /"四个字符,有效范围为0-59的整数
    Hours:可出现", - * /"四个字符,有效范围为0-23的整数
    DayofMonth:可出现", - * / ? L W C"八个字符,有效范围为0-31的整数
    Month:可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc
    DayofWeek:可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
    Year:可出现", - * /"四个字符,有效范围为1970-2099年

    3、一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
    按顺序依次为:

    秒(0~59)
    分钟(0~59)
    小时(0~23)
    天(月)(0~31,但是你需要考虑你月的天数)
    月(0~11)
    天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
    年份(1970-2099)

    3、列举几个:

    0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
    0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
    0 0 12 ? * WED 表示每个星期三中午12点
    "0 0 12 * * ?" 每天中午12点触发
    "0 15 10 ? * *" 每天上午10:15触发
    "0 15 10 * * ?" 每天上午10:15触发
    "0 15 10 * * ? *" 每天上午10:15触发
    "0 15 10 * * ? 2005" 2005年的每天上午10:15触发

    相关文章

      网友评论

          本文标题:定时发送邮件(定时任务、cron表达式)

          本文链接:https://www.haomeiwen.com/subject/mlznwqtx.html