zoukankan      html  css  js  c++  java
  • Springboot定时发送邮件,并附带Excel文件和PDF文件

    1、导入jar包

       <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-mail</artifactId>
      </dependency>

    注意: 先进入QQ邮箱,点击设置,再点击帐户

    在帐户中找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,开启IMAP/SMTP服务,获取密码

    2、配置application.yml

    spring: 
     mail:
        #邮箱服务器地址
        host: smtp.qq.com      #QQ邮箱
        username: xxxxxxxxx@qq.com #QQ邮箱
        password: xxxxxxxxxx  #开启邮箱服务的密码
        default-encoding: UTF-8

    3、我是把发送、接收和抄送的邮箱都配置在了application.yml,如果你不想配置在yml文件里可以跳过这一步

    mail:
      fromMail:
        addr: xxxxxxx@qq.com #发送邮件的邮箱
      toMail:
        to: xxxxxxx@qq.com #接收邮件的邮箱
        ccone: xxxxxxx@hotmail.com #第一个抄送邮箱
        cctwo: xxxxxxxx@gmail.com #第二个抄送邮箱
        bcc: xxxxxxx@qq.com #隐秘抄送邮箱

    4、创建发送邮件方法

    4.1、MailService

    /**
     * @program: 
     * @description: 定时发送邮件Service
     * @author: SaffiChan
     * @create: 2021-04-13 09:16
     **/
    public interface MailService {
    
        void sendHtmlMail(String subject, String content, String filePathExcel, String filePathPdf);
    
    }

    4.2、MailServiceImpl

    import com.well.supermarket.service.MailService;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.mail.javamail.MimeMessageHelper;
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Service;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.annotation.Resource;
    import javax.mail.MessagingException;
    import javax.mail.internet.MimeMessage;
    import java.io.*;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.regex.Pattern;
    
    /**
     * @program: 
     * @description: 定时发送邮件ServiceImpl
     * @author: SaffiChan
     * @create: 2021-04-13 09:18
     **/
    
    @Component
    @Service
    public class MailServiceImpl implements MailService {
    
        private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @Resource
        private JavaMailSender mailSender;
    
        @Value("${mail.fromMail.addr}")
        private String from;
    
        @Value("${mail.toMail.to}")
        private String to;
    
        @Value("${mail.toMail.ccone}")
        private String ccone;
    
        @Value("${mail.toMail.cctwo}")
        private String cctwo;
    
        @Value("${mail.toMail.bcc}")
        private String bcc;
    /**
         * 发送html邮件
         *
         * @param
         * @param subject
         * @param content
         */
        @Override
        public void sendHtmlMail(String subject, String content, String filePathExcel, String filePathPdf) {
            MimeMessage message = mailSender.createMimeMessage();
    
            try {
                //true表示需要创建一个multipart message
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(from); //配置在yml文件中的发件人邮箱
                helper.setTo(to);  //配置在yml文件中的收件人邮箱
                String[] cc = {ccone,cctwo}; //将两个抄送邮箱放进String[]中作为一个参数传值
                helper.setCc(cc); //设置抄送人邮箱
                helper.setBcc(bcc);  //设置隐秘抄送人邮箱
                helper.setSubject(subject);  //设置标题
                helper.setText(content, true); //设置邮件内容,并开启H5
    
                // 判断是否带有Excel附件
                if (filePathExcel != null) {
                    FileSystemResource file = new FileSystemResource(new File(filePathExcel));
                    String fileName = filePathExcel.substring(filePathExcel.lastIndexOf(File.separator));
                    helper.addAttachment(fileName, file);
                }
                // 判断是否带有Pdf附件
                if (filePathPdf != null) {
                    FileSystemResource file = new FileSystemResource(new File(filePathPdf));
                    String fileName = filePathPdf.substring(filePathPdf.lastIndexOf(File.separator));
                    helper.addAttachment(fileName, file);
                }
                mailSender.send(message);
                logger.info("定时报表邮件发送成功");
            } catch (MessagingException e) {
                logger.error("发送定时报表邮件时发生异常!", e);
            }
        }
    }

    5、创建定时任务

    import com.well.supermarket.service.MailService;import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    import java.text.SimpleDateFormat;import java.util.Date;/**
     * @program: 
     * @description: 发送邮件定时任务
     * @author: SaffiChan
     * @create: 2021-04-13 09:23
     **/
    
    @Component
    public class EmailSchedulerTask {
    
        @Autowired
        private MailService mailService;
    /**
         * 每天凌晨00:02分执行,corn表达式可根据自己需求定义
         */
        @Scheduled(cron="0 02 00 * * ? ")  
        private void processDay() throws Exception {
           
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    
            String emailContent = formatter.format(new Date())+" 日報表";
    
            mailService.sendHtmlMail(formatter.format(new Date())+"日報表",emailContent, filePathExcel,filePathPdf);
    
    
        }
    
    }
  • 相关阅读:
    爬虫那些事儿---爬虫选择策略
    爬虫那些事儿--Http返回码
    【珍藏】linux 同步IO: sync、fsync与fdatasync
    perf学习-linux自带性能分析工具
    进程调度原理
    phpmyadmin 免登陆
    请为main函数提供返回值
    悬挂else引发的问题
    PhpMyAdmin导入数据库大小限制?
    linux内核Makefile整体分析
  • 原文地址:https://www.cnblogs.com/shoose/p/14700428.html
Copyright © 2011-2022 走看看