Spring Boot 邮件发送多个收件人

直接上代码,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

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值