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

相关推荐
canonical_entropy3 小时前
AI时代,我们还需要低代码吗?—— 一场关于模型、演化与软件未来的深度问答
后端·低代码·aigc
颜如玉4 小时前
HikariCP:Dead code elimination优化
后端·性能优化·源码
考虑考虑4 小时前
Jpa使用union all
java·spring boot·后端
bobz9655 小时前
virtio vs vfio
后端
Rexi6 小时前
“Controller→Service→DAO”三层架构
后端
bobz9656 小时前
计算虚拟化的设计
后端
深圳蔓延科技6 小时前
Kafka的高性能之路
后端·kafka
Barcke6 小时前
深入浅出 Spring WebFlux:从核心原理到深度实战
后端
JuiceFS6 小时前
从 MLPerf Storage v2.0 看 AI 训练中的存储性能与扩展能力
运维·后端
大鸡腿同学6 小时前
Think with a farmer's mindset
后端