SpringBoot实现发送邮件

代码出处:码云地址:https://gitee.com/yb2cc1314/spring-boot-realizes-sending

使用SpringBoot完成邮件发送功能:

MailService接口中定义了三个方法:sendSimpleMail(发送文本邮件)、sendHtmlMail(发送HTML格式邮件)、sendAppendixMail(发送带有附件的邮件)。

1.依赖包pom.xml:
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>
2.配置文件application.yml:
spring:
  mail:
    # 配置 SMTP 服务器地址
    host: smtp.qq.com
    # 发送者邮箱,已开通POP3/SMTP服务的邮箱,也就是你自己的
    username: #发送者邮箱,已开通POP3/SMTP服务的邮箱,也就是你自己的
    # 配置密码,注意不是真正的密码,而是刚刚申请到的授权码
    password: #申请到的授权码
    # 邮件接收者
    mailRecipient: #邮件接收者邮箱
    # 端口号465或587(QQ邮箱发送邮件仅支持587端口协议)
    port: 587
    # 默认的邮件编码为UTF-8
    default-encoding: UTF-8
    # 配置SSL 加密工厂
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
        #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
        debug: true
3.发送邮件服务接口:MailService
/**
 * @description 邮件功能接口
 */
public interface MailService {

    /** 1
     * @description 发送简单文本邮件
     * @param mailRecipient  邮件接收方
     * @param subject  邮件主题
     * @param messageText  HTML格式的邮件文本内容
     */
    void sendSimpleMail(String mailRecipient,String subject ,String messageText);

    /** 2
     * @description 发送HTML格式邮件
     * @param mailRecipient 邮件接收方
     * @param subject 邮件主题
     * @param htmlText HTML格式的邮件文本内容
     */
    void sendHtmlMail(String mailRecipient,String subject , String  htmlText);


    /** 3
     * @description 发送包含附件的邮件
     * @param mailRecipient 邮件接收方
     * @param subject 邮件主题
     * @param messageText 邮件文本内容
     * @param filePathList 附件(文件路径集合)
     */
    void sendAppendixMail(String mailRecipient , String subject , String messageText , List<String> filePathList);
}
4.发送邮件服务实现类:MailServiceImpl
/**
 * @description MailService接口实现类
 */
@Slf4j
@Service
public class MailServiceImpl implements MailService {

    // JavaMailSender是一个用于发送Java邮件的框架,用于简化基于Java的邮件发送。
    // 它封装了JavaMail API,允许开发者使用简单的API来发送和接收电子邮件。
    @Autowired
    private JavaMailSender javaMailSender;


    //邮件发送方邮箱
    @Value("${spring.mail.username}")
    private String MailSender;

    /**
     * @description 发送简单文件邮件
     * @param mailRecipient  邮件接收方
     * @param subject  邮件主题
     * @param messageText 邮件文本内容
     */
    @Override
    public void sendSimpleMail(String mailRecipient, String subject, String messageText) {

        //1、创建邮件对象(设置参数后提交)
        SimpleMailMessage message = new SimpleMailMessage();
        //2、设置主题
        message.setSubject(subject);
        //3、设置邮件发送者
        message.setFrom(MailSender);
        //4、设置邮件接受者,多个接受者传参为数组格式
        message.setTo(mailRecipient);
        //5、设置邮件正文(邮件的正式内容)
        message.setText(messageText);
        //6、发送邮件
        try {
            javaMailSender.send(message);
            log.info("文本邮件已发送成功");
        } catch (MailException e) {
            e.printStackTrace();
            throw new RuntimeException("邮件发送异常");
        }
    }

    /**
     * @description 发送HTML格式文件邮件
     * @param mailRecipient 邮件接收方
     * @param subject 邮件主题
     * @param htmlText HTML格式的邮件内容
     */
    @Override
    public void sendHtmlMail(String mailRecipient, String subject, String htmlText) {

        //1、获取MimeMessage对象,多用途的网际邮件扩充协议
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper;

        try {
            mimeMessageHelper =  new  MimeMessageHelper(mimeMessage,true);
            //2、设置邮件发送者
            mimeMessageHelper.setFrom(MailSender);
            //3、设置邮件接受方
            mimeMessageHelper.setTo(mailRecipient);
            //4、设置邮件主题
            mimeMessageHelper.setSubject(subject);
            //5、设置邮件内容(HTML格式邮件内容),带html格式第二个参数true
            mimeMessageHelper.setText(htmlText,true);
            //6、发送邮件
            javaMailSender.send(mimeMessage);
            log.info("html格式的邮件发送成功");

        } catch (MessagingException e) {
            e.printStackTrace();
            throw new RuntimeException("邮件发送异常");
        }

    }

    /**
     * 发送带有附件的邮件
     * @param mailRecipient 邮件接收方
     * @param subject 邮件主题
     * @param messageText 邮件文本内容
     * @param filePathList 附件(文件路径集合)
     */
    @Override
    public void sendAppendixMail(String mailRecipient, String subject, String messageText, List<String> filePathList) {

        //1、获取MimeMessage对象,多用途的网际邮件扩充协议
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper ;

        try {
            mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            //2、设置邮件发送方
            mimeMessageHelper.setFrom(MailSender);
            //3、设置邮件接收方
            mimeMessageHelper.setTo(mailRecipient);
            //4、设置邮件主题
            mimeMessageHelper.setSubject(subject);
            //5、设置邮件内容(第二个参数需要为true)
            mimeMessageHelper.setText(messageText,true);
            //附件内容
            for (String filePath : filePathList) {
                //FileSystemResource是Spring框架中的一个类,用来以URL或者File方式访问文件系统中的文件
                //通过FileSystemResource对象以File方式访问指定文件
                // public FileSystemResource(File file): filePath表示要访问的文件路径
                FileSystemResource file = new FileSystemResource(new File(filePath));

                //从给定的文件路径中提取出文件的文件名
//                FileSystemResource file = new FileSystemResource(new File("文件地址"));
//                String filename = file.getFilename(); // 获取附件名称
                // 例如:如果输入的文件路径“C:\folder\file.txt”,那么它将提取出文件名为“file.txt”。
                String fileName =  file.getFilename();
                log.info("附件名称:"+fileName);
                //addAttachment()方法:添加附件到电子邮件中。它接收两个参数,
                // 第一个参数:文件的文件名,
                // 第二个参数:文件对象
                // 结合使用这两个参数,可以将一个或多个文件添加到电子邮件中
                mimeMessageHelper.addAttachment(fileName,file);
            }
            //6、发送文件
            javaMailSender.send(mimeMessage);
            log.info("带有附件的邮件发送成功");

        } catch (MessagingException e) {
            e.printStackTrace();
            throw new RuntimeException("邮件发送异常");
        }
    }
}
5.功能测试:
@SpringBootTest
class SpringbootMailApplicationTests {

    @Autowired
    private MailService mailService;

    // 邮件发送者
    @Value("${spring.mail.mailRecipient}")
    private String mailRecipient;

    private  String subject = "邮件发送测试";

    // 用于简单文本邮件测试
    private  String messageText = "这是一份测试邮件";

    // 用于HTML格式邮件测试
    private String htmlMessage ="<div>\n" +
            "    <p>这是一个HTML格式的邮件</p> <br>" +
            "    <img src=\"https://w.wallhaven.cc/full/p9/wallhaven-p9o51m.png\" width='500' height='300' /><br>\n" +
            "    <a href=\"https://www.yb2cc.cn\" title=\"码上就去学习\" target=\"_blank\">点我码上就去学习</a>\n" +
            "</div>";

    // 用于带有附件的邮件测试(文件路径)
//    String filePath = "C:\\Users\\Administrator\\Desktop\\初恋_林志美.mp3";
    String filePath = "E:\\idea_space_oneself\\压缩包资料\\spring-boot-realizes-sending-master.zip";


    /**
     * 测试简单文本邮件发送
     */
    @Test
    public void test1(){
      mailService.sendSimpleMail(mailRecipient,subject,messageText);
    }

    /**
     * 测试HTML格式邮件发送
     */
    @Test
    public void test2(){
        mailService.sendHtmlMail(mailRecipient,subject,htmlMessage);
    }

    /**
     * 测试带有附件邮件发送
     */
    @Test
    public void test3(){
        ArrayList<String> list = new ArrayList<>();
        list.add(filePath);
        mailService.sendAppendixMail(mailRecipient,subject,messageText,list);
    }
}
6.测试效果:

发送文本邮件效果:
在这里插入图片描述
发送HTML格式邮件效果:
在这里插入图片描述
发送带有附件的邮件效果:
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您好!要在Spring Boot实现发送邮件,您可以按照以下步骤进行操作: 1. 添加依赖:在您的项目的pom.xml文件中添加Spring Boot的邮件依赖,如下所示: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 2. 配置邮件发送信息:在您的application.properties或application.yml文件中配置SMTP服务器和相应的认证信息,示例如下: ```properties # SMTP服务器地址 spring.mail.host=your-smtp-server # SMTP服务器端口 spring.mail.port=your-smtp-port # 邮件发送者用户名 spring.mail.username=your-username # 邮件发送者密码 spring.mail.password=your-password # 邮件发送者邮箱地址 spring.mail.from=your-email-address ``` 3. 创建邮件发送服务类:创建一个用于发送邮件的服务类,可以使用JavaMailSender类提供的方法来发送邮件。以下是一个简单的示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @Service public class EmailService { @Autowired private JavaMailSender javaMailSender; public void sendEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); javaMailSender.send(message); } } ``` 4. 在需要发送邮件的地方调用服务类:在您的代码中,通过@Autowired注解将邮件发送服务类注入到需要发送邮件的地方,并调用sendEmail方法发送邮件,示例如下: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @Autowired private EmailService emailService; @GetMapping("/sendEmail") public String sendEmail() { String to = "recipient@example.com"; String subject = "Test Email"; String text = "This is a test email."; emailService.sendEmail(to, subject, text); return "Email sent successfully."; } } ``` 这样,您就可以在Spring Boot应用程序中实现发送邮件功能了。请注意替换相应的SMTP服务器和认证信息,并根据您的需求进行修改和优化代码。希望对您有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值