whycxzp
2025-04-29 060775f31a57afe5aad778258e8a9de3114314d3
调整邮件发送
5个文件已修改
2个文件已添加
205 ■■■■■ 已修改文件
pom.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/Software.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/schedule/SoftwareMailSchedule.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/SoftwareService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/util/MailUtil.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/config/application-dev.yml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/config/application-prod.yml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -33,7 +33,10 @@
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
       <!--<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
src/main/java/com/whyc/pojo/Software.java
@@ -38,4 +38,7 @@
    private Date createTime;
    private Integer mailSt;
    private Date sendTime;
}
src/main/java/com/whyc/schedule/SoftwareMailSchedule.java
New file
@@ -0,0 +1,55 @@
package com.whyc.schedule;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.pojo.Software;
import com.whyc.service.SoftwareService;
import com.whyc.util.DateUtil;
import com.whyc.util.MailUtil;
import com.whyc.util.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import java.util.Arrays;
import java.util.List;
/**
 * 软件升级申请邮件推送定时任务
 */
@EnableScheduling
@Component
public class SoftwareMailSchedule {
    @Autowired
    private MailUtil mailUtil;
    @Autowired
    private SoftwareService softwareService;
    /**数据4秒钟获取一次*/
    @Scheduled(cron = "0/4 * * * * ? ")
    public void sendMail(){
        //查询需要发送邮件
        List<Software> list = softwareService.getSendList();
        String[] toArrStr = new String[]{"perryhsu@163.com"};
        List toArr = Arrays.asList(toArrStr);
        for (int i = 0; i < list.size(); i++){
            Software software = list.get(i);
            ThreadPoolExecutorFactory.getPoolExecutor().execute(() -> {
                // 发送邮件
                try {
                    mailUtil.sendMailBatch(toArr, "长城汽车-电池系统软件升级申请", "SN码:"+software.getSnCode()+"\n软件序列号:"+software.getSerialNumber()+"\n版本:"+software.getVersion()+"\n申请时间:"+ ThreadLocalUtil.format(software.getCreateTime(),1));
                    //更新邮件发送状态
                    softwareService.updateMailStatus(software.getId());
                } catch (MessagingException e) {
                    throw new RuntimeException(e);
                }
            });
        }
    }
}
src/main/java/com/whyc/service/SoftwareService.java
@@ -98,4 +98,18 @@
        List<String> materialCodeList = mapper.selectList(query).stream().map(Software::getMaterialCode).collect(Collectors.toList());
        return new Response().set(1, materialCodeList);
    }
    public List<Software> getSendList() {
        QueryWrapper<Software> query = Wrappers.query();
        query.eq("mail_st", 0);
        return mapper.selectList(query);
    }
    public void updateMailStatus(Integer id) {
        Software software = new Software();
        software.setMailSt(1);
        software.setSendTime(new Date());
        software.setId(id);
        mapper.updateById(software);
    }
}
src/main/java/com/whyc/util/MailUtil.java
New file
@@ -0,0 +1,116 @@
package com.whyc.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.List;
@Component
public class MailUtil {
    @Value("${spring.mail.username}")
    String from;
    @Autowired
    JavaMailSender mailSender;
    //简单邮件
    public void sendSimpleMail(String to, String subject, String content){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from); //发件人
        message.setTo(to);//收件人
        message.setSubject(subject); //标题
        message.setText(content);   //文件内容
        try {
            mailSender.send(message);
            System.out.println("简单邮件发送成功!");
        } catch (Exception e){
            System.out.println("发送简单邮件时发生异常!"+e);
        }
    }
    //简单邮件
    public void sendMailBatch(List<String> toList, String subject, String content) throws MessagingException {
        if(toList.isEmpty()){
           return;
        }
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message,false);
        helper.setFrom(from); //发件人
        String[] toArr = toList.toArray(new String[toList.size()]);
        helper.setTo(toArr);//收件人
        helper.setSubject(subject); //标题
        helper.setText("邮件来自电池-长城汽车平台,内容为:\n"+content);   //文件内容
        mailSender.send(message);
    }
    //html格式邮件
    public void sendHtmlMail(String to, String subject, String content){
        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);
            mailSender.send(message);
            System.out.println("html邮件发送成功!");
        } catch (MessagingException e) {
            System.out.println("发送html邮件时发生异常!"+e);
        }
    }
    //带附件的邮件
    public void sendAttachmentsMail(String to, String subject, String content, String filePath){
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
            FileSystemResource file = new FileSystemResource(new File(filePath));
            String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
            helper.addAttachment(fileName, file);
            mailSender.send(message);
            System.out.println("带附件的邮件已经发送。");
        } catch (MessagingException e) {
            System.out.println("发送带附件的邮件时发生异常!" + e);
        }
    }
    //带静态资源的邮件
    public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
            FileSystemResource res = new FileSystemResource(new File(rscPath));
            helper.addInline(rscId, res);
            mailSender.send(message);
            System.out.println("嵌入静态资源的邮件已经发送。");
        } catch (MessagingException e) {
            System.out.println("发送嵌入静态资源的邮件时发生异常!" + e);
        }
    }
}
src/main/resources/config/application-dev.yml
@@ -37,6 +37,12 @@
      max-request-size: 200MB
  messages:
    basename: i18n/message
  mail:
    host: smtp.163.com
    port:
    username: whyc_doc@163.com
    password: JAMKMEQUOAGGMSVV
    default-encoding: UTF-8
jasypt:
  encryptor:
    #password: 9Lu6HgEvttjj8vYhy3ID+PqPbumuXhcH
src/main/resources/config/application-prod.yml
@@ -34,6 +34,12 @@
      max-request-size: 200MB
  messages:
    basename: i18n/message
  mail:
    host: smtp.163.com
    port:
    username: whyc_doc@163.com
    password: JAMKMEQUOAGGMSVV
    default-encoding: UTF-8
jasypt:
  encryptor:
    algorithm: PBEWithMD5AndDES