Java—Spring邮件

简介

Spring提供的Mail邮件功能是一个强大的模块,它封装了JavaMail API,为开发者在Spring应用程序中集成邮件发送和接收功能提供了极大的便利。

背景

积累知识。

教程

1、pom依赖
<!--邮件-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--代码简化工具-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
    <scope>provided</scope>
</dependency>
2、Yaml配置
spring:
  mail:
    host: smtp.qq.com/smtp.163.com(邮箱服务器)
    username: 发送邮件邮箱
    password: 授权码(一般去对应邮箱网站获取)
3、邮件属性类
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @Author ClancyLv
 * @Date 2024/8/16 10:14
 * @Description 属性--邮件
 */
@Data
@Component
@ConfigurationProperties(prefix = "spring.mail")
public class MailProperties {
    /**
     * 邮件服务器地址
     */
    private String host;

    /**
     * 邮件服务器用户名
     */
    private String username;

    /**
     * 邮件服务器密码
     */
    private String password;
}

4、邮件工具类
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.mail.MailException;
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.ArrayList;
import java.util.List;

/**
 * @Author ClancyLv
 * @Date 2024/8/16 10:11
 * @Description 工具类--邮件发送
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class Mail {
    private final MailProperties mailProperties;
    private final JavaMailSender javaMailSender;

    /**
     * 发送简单文本邮件
     * @param subject 邮件主题
     * @param text 邮件内容
     * @param toList 邮件接收者列表
     */
    public void sendTextMail(String subject, String text, List<String> toList) {
        // 列表转数组
        String[] to = toList.toArray(new String[0]);
        sendTextMail(subject, text, to);
    }

    /**
     * 发送简单文本邮件
     * @param subject 邮件主题
     * @param text 邮件内容
     * @param to 邮件接收者
     */
    @SneakyThrows
    public void sendTextMail(String subject, String text, String... to) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        try {
            // 邮件发送来源
            simpleMailMessage.setFrom(mailProperties.getUsername());
            // 邮件发送地址
            simpleMailMessage.setTo(to);
            // 邮件主题
            simpleMailMessage.setSubject(subject);
            // 邮件内容
            simpleMailMessage.setText(text);
            // 发送邮件
            javaMailSender.send(simpleMailMessage);
        } catch (MailException e) {
            log.error("发送简单文本邮件异常:{}", e.getMessage());
            e.printStackTrace();
            throw new MessagingException("发送简单文本邮件异常:" + e.getMessage());
        }
    }

    /**
     * 发送Html邮件
     * @param subject 邮件主题
     * @param html 邮件内容
     * @param toList 邮件接收者列表
     */
    public void sendHtmlMail(String subject, String html, List<String> toList) {
        // 列表转数组
        String[] to = toList.toArray(new String[0]);
        sendHtmlMail(subject, html, to);
    }

    /**
     * 发送Html邮件
     * @param subject 邮件主题
     * @param html 邮件内容
     * @param to 邮件接收者
     */
    @SneakyThrows
    public void sendHtmlMail(String subject, String html, String... to) {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            // 邮件发送来源
            mimeMessageHelper.setFrom(mailProperties.getUsername());
            // 邮件发送地址
            mimeMessageHelper.setTo(to);
            // 邮件主题
            mimeMessageHelper.setSubject(subject);
            // 邮件内容
            mimeMessageHelper.setText(html, true);
            // 发送邮件
            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            log.error("发送Html邮件异常:{}", e.getMessage());
            e.printStackTrace();
            throw new MessagingException("发送Html邮件异常:" + e.getMessage());
        }
    }

    /**
     * 发送图片邮件
     * @param subject 邮件主题
     * @param text 邮件内容
     * @param file 图片
     * @param toList 邮件接收者列表
     */
    public void sendImageMail(String subject, String text, File file, List<String> toList) {
        // 列表转数组
        String[] to = toList.toArray(new String[0]);
        sendImageMail(subject, text, file, to);
    }


    /**
     * 发送图片邮件
     * @param subject 邮件主题
     * @param text 邮件内容
     * @param file 图片
     * @param to 邮件接收者
     */
    public void sendImageMail(String subject, String text, File file, String... to) {
        sendImageMail(subject, text, new ArrayList<File>(){{ add(file); }}, to);
    }

    /**
     * 发送图片邮件
     * @param subject 邮件主题
     * @param text 邮件内容
     * @param files 图片列表
     * @param to 邮件接收者
     */
    @SneakyThrows
    public void sendImageMail(String subject, String text, List<File> files, String... to) {
        // 处理图片
        StringBuilder content = new StringBuilder(getHtmlHead(text));
        for (File file : files) {
            // 图片名+图片索引作为图片cid(cid用于标识图片)
            content.append("<img src=\"cid:").append(file.getName()).append(files.indexOf(file)).append("\" >");
        }
        content.append(getHtmlFoot());

        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            // 邮件发送来源
            mimeMessageHelper.setFrom(mailProperties.getUsername());
            // 邮件发送地址
            mimeMessageHelper.setTo(to);
            // 邮件主题
            mimeMessageHelper.setSubject(subject);
            // 邮件内容
            mimeMessageHelper.setText(content.toString(), true);
            for (File file : files) {
                // 添加图片
                mimeMessageHelper.addInline(file.getName() + files.indexOf(file), file);
            }
            // 发送邮件
            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            log.error("发送图片邮件异常:{}", e.getMessage());
            e.printStackTrace();
            throw new MessagingException("发送图片邮件异常:" + e.getMessage());
        }
    }

    /**
     * 发送附件邮件
     * @param subject 邮件主题
     * @param text 邮件内容
     * @param isHtml true:是 false:否
     * @param file 图片
     * @param toList 邮件接收者列表
     */
    public void sendFileMail(String subject, String text, boolean isHtml, File file, List<String> toList) {
        // 列表转数组
        String[] to = toList.toArray(new String[0]);
        sendFileMail(subject, text, isHtml, file, to);
    }


    /**
     * 发送附件邮件
     * @param subject 邮件主题
     * @param text 邮件内容
     * @param isHtml true:是 false:否
     * @param file 图片
     * @param to 邮件接收者
     */
    public void sendFileMail(String subject, String text, boolean isHtml, File file, String... to) {
        sendFileMail(subject, text, isHtml, new ArrayList<File>(){{ add(file); }}, to);
    }

    /**
     * 发送附件邮件
     * @param subject 邮件主题
     * @param text 邮件内容
     * @param isHtml true:是 false:否
     * @param files 附件列表
     * @param to 邮件接收者
     */
    @SneakyThrows
    public void sendFileMail(String subject, String text, boolean isHtml, List<File> files, String... to) {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            // 邮件发送来源
            mimeMessageHelper.setFrom(mailProperties.getUsername());
            // 邮件发送地址
            mimeMessageHelper.setTo(to);
            // 邮件主题
            mimeMessageHelper.setSubject(subject);
            // 邮件内容
            mimeMessageHelper.setText(text, isHtml);
            for (File file : files) {
                // 添加附件
                mimeMessageHelper.addAttachment(file.getName(), file);
            }
            // 发送邮件
            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            log.error("发送附件邮件异常:{}", e.getMessage());
            e.printStackTrace();
            throw new MessagingException("发送附件邮件异常:" + e.getMessage());
        }
    }

    /**
     * 发送图片和附件邮件
     * @param subject 邮件主题
     * @param text 邮件内容
     * @param imageFiles 图片列表
     * @param files 附件列表
     * @param toList 邮件接收者列表
     */
    @SneakyThrows
    public void sendImageAndFileMail(String subject, String text, List<File> imageFiles, List<File> files, List<String> toList) {
        // 列表转数组
        String[] to = toList.toArray(new String[0]);
        sendImageAndFileMail(subject, text, imageFiles, files, to);
    }

    /**
     * 发送图片和附件邮件
     * @param subject 邮件主题
     * @param text 邮件内容
     * @param imageFiles 图片列表
     * @param files 附件列表
     * @param to 邮件接收者
     */
    @SneakyThrows
    public void sendImageAndFileMail(String subject, String text, List<File> imageFiles, List<File> files, String... to) {
        // 处理图片
        StringBuilder content = new StringBuilder(getHtmlHead(text));
        for (File file : imageFiles) {
            // 图片名+图片索引作为图片cid(cid用于标识图片)
            content.append("<img src=\"cid:").append(file.getName()).append(files.indexOf(file)).append("\" >");
        }
        content.append(getHtmlFoot());

        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            // 邮件发送来源
            mimeMessageHelper.setFrom(mailProperties.getUsername());
            // 邮件发送地址
            mimeMessageHelper.setTo(to);
            // 邮件主题
            mimeMessageHelper.setSubject(subject);
            // 邮件内容
            mimeMessageHelper.setText(content.toString(), true);
            for (File file : imageFiles) {
                // 添加图片
                mimeMessageHelper.addInline(file.getName() + files.indexOf(file), file);
            }
            for (File file : files) {
                // 添加附件
                mimeMessageHelper.addAttachment(file.getName(), file);
            }
            // 发送邮件
            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            log.error("发送图片和附件邮件异常:{}", e.getMessage());
            e.printStackTrace();
            throw new MessagingException("发送图片和附件邮件异常:" + e.getMessage());
        }
    }

    /**
     * 获取html头部标签
     * @param text 内容
     * @return html头部标签
     */
    private String getHtmlHead(String text) {
        return "<html><body>" + text + "<br>";
    }

    /**
     * 获取html尾部标签
     * @return html尾部标签
     */
    private String getHtmlFoot() {
        return "</body></html>";
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值