java使用springboot实现多个企业邮箱账号发送邮件,亲测有效

28 篇文章 1 订阅
18 篇文章 2 订阅

由于项目要求需要使用不同的企业邮箱账号发送邮件功能,具体的申请企业邮箱步骤就不详细说明了,这里我用的是网易的企业邮箱.
1.邮箱的配置yml文件如下

spring:
#这里需要配置默认的邮件发送信息,不然启动会报错
   mail:
    host: smtphz.qiye.163.com
    username: 账号名称
    password: ******** #这里是账号的客户端授权密码
    senderName: 发送人名称(可不配置)
sender-email:
  configs:
     mail-0:
       host: smtphz.qiye.163.com
       username: 账号名称1
       password: ********#这里是账号的客户端授权密码
       senderName: 发送人名称(可不配置)
     mail-1:
       host: smtphz.qiye.163.com
       username: 账号名称2
       password: ********#这里是账号的客户端授权密码
       senderName: 发送人名称(可不配置)

2.mail配置如下

@Data
@Component
@ConfigurationProperties(prefix = "sender-email", ignoreUnknownFields = false)
public class EmailConfig {

    private Map<String,MailProperties> configs;

    public Map<String, MailProperties> getConfigs() {
        return configs;
    }

    public void setConfigs(Map<String, MailProperties> configs) {
        this.configs = configs;
    }

    @Data
    public static class MailProperties {
        private String host;
        private String username;
        private String password;
        private String senderName;
        public String getHost() {
            return host;
        }

        public void setHost(String host) {
            this.host = host;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public String getSenderName() {
            return senderName;
        }

        public void setSenderName(String senderName) {
            this.senderName = senderName;
        }

        @Override
        public String toString() {
            return "MailProperties{" +
                    "host='" + host + '\'' +
                    ", username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    ", senderName='" + senderName + '\'' +
                    '}';
        }
    }
}

3.发送邮件方法

   @Autowired
    private EmailConfig emailConfig;

    private final List<JavaMailSenderImpl> senderList;
     /**
     * 获取MailSender
     *
     * @return CustomMailSender
     */
    public JavaMailSenderImpl getJavaMailSender(String username) {
        Map<String, EmailConfig.MailProperties> mailConfigs=emailConfig.getConfigs();
        log.info("初始化mailSender,mailConfigs={}",mailConfigs);
        for (EmailConfig.MailProperties mailProperties : mailConfigs.values()) {
            log.info("mailConfigs.values(),mailProperties={}",mailProperties);
            // 邮件发送者
            JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
            javaMailSender.setHost(mailProperties.getHost());
            //5、SMTP服务器: 默认端口 换成腾讯云服务器后,需要将端口换成465
            javaMailSender.setPort(25);
            //6、//发送邮件协议名称
            javaMailSender.setProtocol("smtp");
            //7、编码格式
            javaMailSender.setDefaultEncoding("UTF-8");
            javaMailSender.setUsername(mailProperties.getUsername());
            javaMailSender.setPassword(mailProperties.getPassword());
            //8、创建连接对象,连接到邮箱服务器
            Properties properties = new Properties();
            //发送服务器需要身份验证,要采用指定用户名密码的方式去认证
            properties.put("mail.smtp.auth", true);
            properties.put("mail.smtp.starttls.enable", true);
            //9、添加连接对象到邮件对象中
            javaMailSender.setJavaMailProperties(properties);
            // 添加数据
            senderList.add(javaMailSender);
        }
        if (StringUtil.isNull(username)) {
            throw new MyException(ExceptionEnum.EMAIL_ERROR_TYPE);
        }
        if (senderList.isEmpty()) {
            throw new MyException(ExceptionEnum.EMAIL_ERROR_TYPE);
        }
        for (JavaMailSenderImpl javaMailSender : senderList) {
            if (username.equals(javaMailSender.getUsername())) {
                return javaMailSender;
            }
        }
        // 随机返回一个JavaMailSender
        return senderList.get(new Random().nextInt(senderList.size()));
    }
 /**
     * 发送邮件的方法
     *
     * @Param to :给谁发邮件
     * @Param code : 邮件的激活码
     * @Param subject : 主题
     * @Param text  : 内容
     */
    public void sendMail(String username, String toEmail, String code, final String subject, final String text) {
        try {
            JavaMailSenderImpl javaMailSender = getJavaMailSender(username);
            int count = 1;
            //10、创建
            //可以发送几封邮件:可以这里 for循环多次
            MimeMessage mimeMessage = getMimeMessage(username, toEmail, subject, text, javaMailSender);
            //11、发送邮件
            javaMailSender.send(mimeMessage);
            log.info("发送 第" + count + "封邮件");
            count++;

            log.info("发往 " + toEmail + " 邮件发送成功");
        } catch (MessagingException e) {
            log.error("发往 " + toEmail + " 邮件发送异常", e);
        }
    }
     //声明一个Message对象(代表一封邮件),从session中创建
    private MimeMessage getMimeMessage(String username, String toEmail, String subject, String text, JavaMailSenderImpl javaMailSender) throws MessagingException {

        MimeMessage mimeMessage = javaMailSender.createMimeMessage();

        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
        //发件人
        mimeMessageHelper.setFrom(username);
        //收件人  : 可以发送给多个收件人,该方法有一个重载的 数组形参
        mimeMessageHelper.setTo(toEmail);
        //邮件主题
        mimeMessageHelper.setSubject(subject);
        //邮件内容
        mimeMessageHelper.setText(text, true);

        return mimeMessage;
    }
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值