Spring Boot 邮件发送多个收件人

it2024-03-19  68

直接上代码,copy就可以用

1.yml

config:配置的时发件人,也可以这样配置多个发件人,邮箱为企业邮箱时,password为邮箱密码

为新浪或者QQ时,pssword为授权码

receivers:为收件人,同样可以配置多个

spring: mail: institutionList: send-corn: 0 30 8 * * ? configs: # 账号A - username: 11111@bizatmobile.com password: 123456 host: smtp.partner.outlook.cn port: 587 protocol: smtp default-encoding: UTF-8 properties: mail: smtp: starttls: required: true receivers: - username: 111111qq.com - username: 1@bizatmobile.com

2.config

package com.softium.xsk.salesflow.collect.mail; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.List; @Component @ConfigurationProperties(prefix = "spring.mail") public class MailConfig { private List<MailSender> configs; private List<MailReceiver> receivers; public List<MailSender> getConfigs() { return configs; } public void setConfigs(List<MailSender> configs) { this.configs = configs; } public List<MailReceiver> getReceivers() { return receivers; } public void setReceivers(List<MailReceiver> receivers) { this.receivers = receivers; } }

3.Receiver

package com.softium.xsk.salesflow.collect.mail; import lombok.Data; @Data public class MailReceiver { /** * 收件人 */ private String username; }

4.MailSender

package com.softium.xsk.salesflow.collect.mail; import lombok.Data; import java.util.Properties; @Data public class MailSender { /** * 发件人 */ private String username; /** * 密码 */ private String password; /** * host */ private String host; /** * 端口 */ private Integer port; /** * 协议 */ private String protocol; /** * 默认编码 */ private String defaultEncoding; /** * 验证方式 */ private Properties properties; }

5.util

package com.softium.xsk.salesflow.collect.mail; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @Slf4j @Component public class MailUtil { @Autowired private MailConfig mailConfig; private List<JavaMailSenderImpl> senderList = new ArrayList<>(); /** * 初始化 sender */ public void buildMailSender(){ List<MailSender> mailConfigs = mailConfig.getConfigs(); log.info("初始化mailSender"); senderList.clear(); mailConfigs.forEach(mailSender -> { // 发件人 JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); javaMailSender.setDefaultEncoding(mailSender.getDefaultEncoding()); javaMailSender.setHost(mailSender.getHost()); javaMailSender.setPort(mailSender.getPort()); javaMailSender.setProtocol(mailSender.getProtocol()); javaMailSender.setUsername(mailSender.getUsername()); javaMailSender.setPassword(mailSender.getPassword()); javaMailSender.setJavaMailProperties(mailSender.getProperties()); // 添加数据 senderList.add(javaMailSender); }); } /** * 获取MailSender * @return CustomMailSender */ public List<JavaMailSenderImpl> getSenders(){ buildMailSender(); return senderList; } /** * 清理 sender */ public void clear(){ senderList.clear(); } /** * 获取MailReceiver * @return CustomMailSender */ public String[] getReceivers(){ List<MailReceiver> receivers = mailConfig.getReceivers(); //所有收件人 List<String> receiversUser = new ArrayList<>(); receivers.forEach( receiver -> { receiversUser.add(receiver.getUsername()); }); String[] receiversArr = receiversUser.toArray(new String[0]); return receiversArr; } }

 

6.service

package com.softium.xsk.salesflow.collect.mail; public interface MailService { /** * 发送邮件 * @return 返回 true 或者 false * subject 邮件主题 * content 邮件内容 */ boolean sendMailText(String subject,String content); boolean sendMailHtml(String subject,String content); }

7.impl

package com.softium.xsk.salesflow.collect.mail; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.util.List; @Service @AllArgsConstructor @Slf4j public class MailServiceImpl implements MailService { private final MailUtil mailUtil; @Override public boolean sendMailText(String subject,String content) { List<JavaMailSenderImpl> list = mailUtil.getSenders(); //创建SimpleMailMessage对象 list.forEach( sender -> { SimpleMailMessage message = new SimpleMailMessage(); //邮件发送人 message.setFrom(sender.getUsername()); //邮件接收人 message.setTo(mailUtil.getReceivers()); //邮件主题 message.setSubject(subject); //邮件内容 message.setText(content); //发送邮件 sender.send(message); }); return true; } @Override public boolean sendMailHtml(String subject, String content) { List<JavaMailSenderImpl> list = mailUtil.getSenders(); //创建SimpleMailMessage对象 list.forEach( sender -> { MimeMessage message = sender.createMimeMessage(); //邮件内容 try { MimeMessageHelper helper = new MimeMessageHelper(message, true); //邮件发送人 helper.setFrom(sender.getUsername()); //邮件接收人 helper.setTo(mailUtil.getReceivers()); //邮件主题 helper.setSubject(subject); //第二个参数:格式是否为html helper.setText(content, true); } catch (MessagingException e) { log.error("发送html格式邮件时发生异常!", e); } //发送邮件 sender.send(message); }); return true; } }

9.test

package com.softium.xsk.salesflow.collect.mail; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest public class MailServiceImplTest { @Autowired private MailServiceImpl mailService; @Test public void sendMail() { //mailService.sendMailText("主题text","啊哈哈哈哈哈哈"); mailService.sendMailHtml("主题Html","啊哈哈哈哈哈哈"); } }

10.依赖为 spring-mail

最新回复(0)