spring boot3整合邮件服务实现邮件发送功能

⛰️个人主页:     蒾酒

🔥系列专栏:《spring boot实战》


目录

内容概要

开通服务

依赖引入

配置属性

创建邮件发送工具类

测试


内容概要

本文介绍了spring boot整合email服务,实现发送验证码,邮件(普通文本邮件、静态资源邮件、附件邮件)。

坚持看完相信对你有帮助。

同时欢迎订阅springboot系列专栏,持续分享spring boot的使用经验。

开通服务

实现email服务需要先将自己的邮箱开通POP3/IMAP服务才可以通过该邮箱发送邮件,开通步骤如下:

这里以QQ邮箱为例

1.进入QQ邮箱官网

https://wx.mail.qq.com/

2.登录后点击设置

3.选择账号

找到 POP3/IMAP.....服务这里开启你的服务,这里我已经开启了的。

4.开启服务

开启成功会得到授权码 ,记住这个授权码。下面开始在spring boot中整合。

spring boot整合

1.依赖引入

pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2.配置属性

application.yml:

修改成你自己的实际信息。

spring:
  #邮件服务配置
  mail:
    host: smtp.qq.com #邮件服务器地址
    protocol: smtp #协议
    username: 305462*****@qq.com #发送邮件的邮箱也就是你开通服务的邮箱
    password: fiwvcy******d #开通服务后得到的授权码
    default-encoding: utf-8 #邮件内容的编码

3.创建邮件发送工具类

使用@component注解标记为组件,可以在Service中注入使用。

里面一共定义了几种发送邮件方法:

  1. 发送纯文本的普通邮件,可以发送一些纯文本的消息以及验证码内容。
  2. 发送简单HTML格式的文本内容,可以发验证码信息。
  3. 发送携带附件的邮件,比如word,excel,pdf文档或者其他文件。
  4. 发送高级HTML格式内容可以发一些静态资源,图片,音频,视频等。

具体可以根据业务需求调整代码。我实现的较为简单可以当个模板使用。

import jakarta.annotation.Resource;
import jakarta.mail.internet.MimeMessage;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import java.io.File;
import java.util.Objects;

/**
 * @author mijiupro
 */
@Component
@Slf4j
public class EmailApi {
    @Resource
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String from ;// 发件人

    /**
     * 发送纯文本的邮件
     * @param to 收件人
     * @param subject 主题
     * @param content 内容
     * @return 是否成功
     */
    @SneakyThrows(Exception.class)
    public boolean sendGeneralEmail(String subject, String content, String... to){
        // 创建邮件消息
        org.springframework.mail.SimpleMailMessage message = new org.springframework.mail.SimpleMailMessage();
        message.setFrom(from);
        // 设置收件人
        message.setTo(to);
        // 设置邮件主题
        message.setSubject(subject);
        // 设置邮件内容
        message.setText(content);

        // 发送邮件
        mailSender.send(message);

        return true;
    }
    /**
     * 发送html的邮件
     * @param to 收件人
     * @param subject 主题
     * @param content 内容
     * @return 是否成功
     */
    @SneakyThrows(Exception.class)
    public boolean sendHtmlEmail(String subject, String content, String... to){
        // 创建邮件消息
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom(from);
        // 设置收件人
        helper.setTo(to);
        // 设置邮件主题
        helper.setSubject(subject);
        // 设置邮件内容
        helper.setText(content, true);

        // 发送邮件
        mailSender.send(mimeMessage);

        log.info("发送邮件成功");
        return true;

    }
    /**
     * 发送带附件的邮件
     * @param to 收件人
     * @param subject 主题
     * @param content 内容
     * @param filePaths 附件路径
     * @return 是否成功
     */
    @SneakyThrows(Exception.class)
    public boolean sendAttachmentsEmail(String subject, String content, String[] to, String[] filePaths) {
        // 创建邮件消息
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom(from);
        // 设置收件人
        helper.setTo(to);
        // 设置邮件主题
        helper.setSubject(subject);
        // 设置邮件内容
        helper.setText(content,true);

        // 添加附件
        if (filePaths != null) {
            for (String filePath : filePaths) {
                FileSystemResource file = new FileSystemResource(new File(filePath));
                helper.addAttachment(Objects.requireNonNull(file.getFilename()), file);

            }
        }
        // 发送邮件
        mailSender.send(mimeMessage);
        return true;
    }

    /**
     * 发送带静态资源的邮件
     * @param to 收件人
     * @param subject 主题
     * @param content 内容
     * @param rscPath 静态资源路径
     * @param rscId 静态资源id
     * @return 是否成功
     */
    @SneakyThrows(Exception.class)
    public boolean sendInlineResourceEmail(String subject, String content, String to, String rscPath, String rscId) {
        // 创建邮件消息
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        // 设置发件人
        helper.setFrom(from);
        // 设置收件人
        helper.setTo(to);
        // 设置邮件主题
        helper.setSubject(subject);

        //html内容图片
        String contentHtml = "<html><body>这是邮件的内容,包含一个图片:<img src=\'cid:" + rscId + "\'>"+content+"</body></html>";

        helper.setText(contentHtml, true);
        //指定讲资源地址
        FileSystemResource res = new FileSystemResource(new File(rscPath));
        helper.addInline(rscId, res);

        mailSender.send(mimeMessage);
        return true;
    }

}

4.编写测试用例测试

下面测试前两种发送邮件的方法。

测试发送普通文本邮件

@SpringBootTest
public class EmailTest {
    @Autowired
    private EmailApi emailApi;


    @Test
    public void sendEmail() {
        //发送邮件
        boolean b = emailApi.sendGeneralEmail("测试邮件", " 这是测试邮件", "你的邮箱@163.com");
        System.out.println(b);
    }
}

修改成发送目标邮箱运行代码测试即可。 

测试成功。

 测试发送图片邮件

@SpringBootTest
public class EmailTest {
    @Autowired
    private EmailApi emailApi;


    @Test
    public void sendEmail() {

        // 发送图片邮件
        boolean b = emailApi.sendInlineResourceEmail("测试邮件", " 这是测试邮件", "你的邮箱@163.com",
                "C:\\Users\\mijiupro\\Desktop\\潮.jpg", "C:\\Users\\mijiupro\\Desktop\\潮.jpg");
        System.out.println(b);
    }
}

修改成发送目标邮箱运行代码测试即可。  

好的,我可以为您提供一个简单的示例。 首先,您需要在SpringBoot项目中添加ActiveMQ的依赖。在pom.xml文件中添加以下代码: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> ``` 然后,您需要在application.properties文件中配置ActiveMQ的连接信息,如下所示: ```properties spring.activemq.broker-url=tcp://localhost:61616 spring.activemq.user=admin spring.activemq.password=admin ``` 接下来,您需要创建一个消息队列,用于存储要发送的邮件信息。在SpringBoot中,可以使用JmsTemplate来发送消息。您可以在您的Java代码中注入JmsTemplate,然后使用它来发送邮件消息。以下是一个示例代码: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsTemplate; import org.springframework.stereotype.Service; @Service public class EmailService { @Autowired private JmsTemplate jmsTemplate; public void sendEmail(String to, String message) { jmsTemplate.convertAndSend("email.queue", new Email(to, message)); } } ``` 在上面的代码中,我们注入了JmsTemplate,并使用它来发送一个Email对象到名为“email.queue”的消息队列中。 最后,您需要编写一个消息监听器,用于监听邮件队列中的消息,并实现邮件发送逻辑。以下是一个示例代码: ```java import org.springframework.jms.annotation.JmsListener; import org.springframework.stereotype.Component; @Component public class EmailListener { @Autowired private JavaMailSender mailSender; @JmsListener(destination = "email.queue") public void sendEmail(Email email) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(email.getTo()); message.setSubject("Test Email"); message.setText(email.getMessage()); mailSender.send(message); } } ``` 在上面的代码中,我们使用@JmsListener注解来监听名为“email.queue”的消息队列中的消息,并实现邮件发送逻辑。 最后,您需要确保ActiveMQ服务器已经启动,然后运行您的SpringBoot应用程序即可。 希望这个示例对您有帮助!
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒾酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值