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邮件的功能。这些示例可以帮助你在你的应用程序中集成邮件发送功能,以便满足不同类型的邮件需求

相关推荐
小小娥子23 分钟前
【Redis】Hash类型的常用命令
数据库·spring boot·redis
努力的布布27 分钟前
SpringMVC源码-AbstractHandlerMethodMapping处理器映射器将@Controller修饰类方法存储到处理器映射器
java·后端·spring
PacosonSWJTU32 分钟前
spring揭秘25-springmvc03-其他组件(文件上传+拦截器+处理器适配器+异常统一处理)
java·后端·springmvc
记得开心一点嘛40 分钟前
在Java项目中如何使用Scala实现尾递归优化来解决爆栈问题
开发语言·后端·scala
柏箱1 小时前
PHP基本语法总结
开发语言·前端·html·php
黄俊懿1 小时前
【深入理解SpringCloud微服务】手写实现各种限流算法——固定时间窗、滑动时间窗、令牌桶算法、漏桶算法
java·后端·算法·spring cloud·微服务·架构
2401_857439692 小时前
“衣依”服装销售平台:Spring Boot技术应用与优化
spring boot·后端·mfc
Jerry.ZZZ2 小时前
系统设计,如何设计一个秒杀功能
后端
冷琴19963 小时前
基于java+springboot的酒店预定网站、酒店客房管理系统
java·开发语言·spring boot