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

相关推荐
2401_857439693 分钟前
SpringBoot框架在资产管理中的应用
java·spring boot·后端
怀旧6665 分钟前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
阿华的代码王国25 分钟前
【SpringMVC】——Cookie和Session机制
java·后端·spring·cookie·session·会话
德育处主任Pro1 小时前
『Django』APIView基于类的用法
后端·python·django
哎呦没3 小时前
SpringBoot框架下的资产管理自动化
java·spring boot·后端
2401_857600953 小时前
SpringBoot框架的企业资产管理自动化
spring boot·后端·自动化
并不会5 小时前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器
NiNg_1_2347 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
种树人202408197 小时前
如何在 Spring Boot 中启用定时任务
spring boot
Chrikk9 小时前
Go-性能调优实战案例
开发语言·后端·golang