Spring Boot中实现发送文本、带附件和HTML邮件

SpringBoot实现发送邮箱

引言

在现代应用程序中,电子邮件通常是不可或缺的一部分。在Spring Boot中,你可以轻松地实现发送不同类型的邮件,包括文本、带附件和HTML邮件。本博客将向你展示如何使用Spring Boot发送这些不同类型的电子邮件。

步骤一:导入依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

步骤二:配置邮箱信息

yml 复制代码
mail:
  # 邮件 SMTP 服务器的主机名
  host: smtp.qq.com
  # 用于登录 SMTP 服务器的邮箱地址
  username: 1111111@qq.com
  # 用于登录 SMTP 服务器的邮箱密码或授权码
  password: abcdefghijklmnopqrstuvwxyz
  # SMTP 服务器的端口
  port: 587
  # 是否启用 SMTP 认证,通常应设置为 true
  smtpAuth: true
  # 是否启用 STARTTLS 安全传输协议,通常应设置为 true
  smtpStarttlsEnable: true
  # 是否要求使用 STARTTLS 安全传输协议,通常应设置为 true
  smtpStarttlsRequired: true
  # 默认编码
  defaultEncoding: UTF-8

步骤三:邮箱配置类

java 复制代码
@Data
//配置属性文件
@Component
//说明配置文件属性的头部
@ConfigurationProperties(prefix = "mail")
public class MailConfig {
    private String host;
    private String username;
    private String password;
    private Integer port;
    private String smtpAuth;
    private String smtpStarttlsEnable;
    private String smtpStarttlsRequired;
    private String defaultEncoding;

    @Bean
    public JavaMailSender javaMailSender() {
        //邮箱发送对象
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
        javaMailSender.setHost(host);
        javaMailSender.setPort(port);
        javaMailSender.setUsername(username);
        javaMailSender.setPassword(password);
        javaMailSender.setDefaultEncoding(defaultEncoding);
        // 配置其他属性,如协议、调试等,根据需要
        Properties properties = new Properties();
        properties.setProperty("mail.smtp.auth", smtpAuth);
        properties.setProperty("mail.smtp.starttls.enable", smtpStarttlsEnable);
        properties.setProperty("mail.smtp.starttls.required", smtpStarttlsRequired);
        javaMailSender.setJavaMailProperties(properties);
        return javaMailSender;
    }
}

步骤四:创建邮箱工具类

这里的发送人必须设置不然会报异常:501 Mail from address must be same as authorization user.

java 复制代码
@Component
public class MailUtils {
    @Value("${mail.username}")
    private String username;
    @Resource
    private JavaMailSender javaMailSender;

    /**
     * 邮箱发送
     *
     * @param to      收信人
     * @param title   邮箱标题
     * @param content 邮箱内容
     */
    public void sendMail(String to, String title, String content) {
        //邮箱消息对象
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(username);//发送人
        simpleMailMessage.setTo(to);//收件人
        simpleMailMessage.setSubject(title);//邮箱标题
        simpleMailMessage.setText(content);//邮箱内容
        //实现发送邮箱
        javaMailSender.send(simpleMailMessage);
    }

    /**
     * 群发邮箱
     *
     * @param toList  收信人集合
     * @param title   邮箱标题
     * @param content 邮箱内容
     */
    public void sendEmailToMultipleRecipients(List<String> toList, String title, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(username);//发送人
        message.setTo(toList.toArray(new String[0]));
        message.setSubject(title);
        message.setText(content);
        javaMailSender.send(message);
    }

    /**
     * 发送HTML邮箱
     *
     * @param to       收信人
     * @param title    邮箱标题
     * @param text     HTML内容
     * @param filePath 文件路径
     * @throws MessagingException 邮箱异常
     */
    public void sendEmailWithAttachment(String to, String title, String text, String filePath) throws MessagingException {
        MimeMessage message = javaMailSender.createMimeMessage();
        message.setFrom(username);//发送人
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setTo(to);
        helper.setSubject(title);
        helper.setText(text);
        FileSystemResource file = new FileSystemResource(new File(filePath));
        helper.addAttachment(FileUtil.getName(filePath), file);
        javaMailSender.send(message);
    }

    /**
     * 发送HTML邮箱
     *
     * @param to    收信人
     * @param title 邮箱标题
     * @param text  HTML内容
     * @param file  文件
     * @throws MessagingException 邮箱异常
     */
    public void sendEmailWithAttachment(String to, String title, String text, File file) throws MessagingException {
        MimeMessage message = javaMailSender.createMimeMessage();
        message.setFrom(username);//发送人
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setTo(to);
        helper.setSubject(title);
        helper.setText(text);
        helper.addAttachment(FileUtil.getName(file), file);
        javaMailSender.send(message);
    }

    /**
     * 发送HTML邮箱
     *
     * @param to          收信人
     * @param title       邮箱标题
     * @param htmlContent HTML内容
     * @throws MessagingException 邮箱异常
     */
    public void sendHtmlEmail(String to, String title, String htmlContent) throws MessagingException {
        MimeMessage message = javaMailSender.createMimeMessage();
        message.setFrom(username);//发送人
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setTo(to);
        helper.setSubject(title);
        helper.setText(htmlContent, true); // 设置为true表示HTML内容
        javaMailSender.send(message);
    }
}

通过使用Spring Boot和JavaMailSender,你可以轻松地实现发送文本、带附件和HTML邮件的功能。这些示例可以帮助你在你的应用程序中集成邮件发送功能,以便满足不同类型的邮件需求

相关推荐
Cosolar32 分钟前
不收费、不加水印、数据归你:我做了个开源的在线简历工具
后端·面试·前端框架
小蒜学长2 小时前
基于Spring Boot+Vue3的在线医疗咨询系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·在线问诊·在线医疗咨询系统
陈随易2 小时前
下载神器!Motrix 停更三年后重写回归
前端·后端·程序员
每天一道题2 小时前
CAP、Raft 与多数派:分布式系统如何达成一致?
分布式·后端·微服务
前端的日常3 小时前
一个人+AI做情侣食谱小程序,0 费用的服务器
前端·后端
IT_陈寒3 小时前
Vue的v-for里用了个临时变量,页面直接挂了
前端·人工智能·后端
ServBay4 小时前
本地模型已经跑起来了,Copilot Fusion 为什么还要联网?
后端·ai编程·github copilot
武子康5 小时前
H3-World 的动作没按时发生,先检查时间线变成了什么
人工智能·后端·agent
苍何5 小时前
腾讯 Buddy One 来了,办公全家桶一键打通WorkBuddy(附教程)
后端
GIS数据转换器5 小时前
基于CIM的城市智慧供热监管服务平台
java·大数据·开发语言·人工智能·后端·物联网·struts