SpringBoot实现发送邮件

2023-12-22 21:30:11

SpringBoot实现发送邮件

仅供参考:实现逻辑自行修改

引入依赖

<!--springboot-邮箱依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

yml配置

--- # 企业邮箱配置
spring:
  mail:
    protocol: smtp
    #邮件服务器地址
    host: 邮件服务器地址
    #端口号
    port: 465
    username: 你的QQ邮箱
    sendFrom: 发件人【需要邮箱】
    # 去邮箱中生成秘钥/授权码
    password: 秘钥/授权码
    #默认编码格式
    default-encoding: UTF-8
    properties:
      mail:
        #启动debug调试,生产环境关闭
        debug: false
        smtp:
          socketFactory:
            #SSL连接配置
            class: javax.net.ssl.SSLSocketFactory

工具类

import cn.hutool.core.io.IoUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.io.InputStreamSource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.mail.internet.MimeMessage;
import java.util.List;
import java.util.Objects;

@Slf4j
public class MeetingEmailUtils {

    private static final JavaMailSender mailSender;

    private static final String sendFrom;

    private static final String defaultSubject;

    static {
        mailSender = SpringUtil.getBean(JavaMailSender.class);
        sendFrom = SpringUtil.getProperty("spring.mail.sendFrom");
        defaultSubject = SpringUtil.getProperty("spring.mail.defaultSubject");
    }

    /**
     * (支持批量并跳过错误邮箱)发送邮件(支持带附件)
     *
     * @param to         收件人
     * @param ccTos      抄送人(复数)
     * @param subject    邮件主题
     * @param content    邮件内容
     * @param fileArrays {"fileName":"文件名", "fileBytes":"文件字节数组"}
     */
    public static void sendMail(String to, String subject, String content, List<JSONObject> fileArrays, String... ccTos) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        if (StringUtils.isBlank(to)) {
            throw new RuntimeException("邮箱收件人为空");
        }
        try {
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);
            //发件人
            messageHelper.setFrom(sendFrom);
            //收件人
            messageHelper.setTo(to);
            //抄送
            if (Objects.nonNull(ccTos) && ccTos.length == 0) {
                messageHelper.setCc(ccTos);
            }
            //主题
            messageHelper.setSubject(StringUtils.isNotBlank(subject) ? subject : defaultSubject);
            //邮件内容
            if (StringUtils.isNotBlank(content)) {
                messageHelper.setText(content);
            }
            //邮件附件
            if (Objects.nonNull(fileArrays) && !fileArrays.isEmpty()) {
                for (JSONObject json : fileArrays) {
                    InputStreamSource inputStreamSource = () -> IoUtil.toStream(json.getBytes("fileBytes"));
                    messageHelper.addAttachment(json.getString("fileName"), inputStreamSource);
                }
            }
            mailSender.send(mimeMessage);
        } catch (Exception e) {
            log.error("发送给【{}】的邮件失败,原因是: {}", to, e.getMessage());
        }
        //日志信息
        log.info("邮件批量发送完成");
    }
}

文章来源:https://blog.csdn.net/qq_36763419/article/details/135160065
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。