当前位置: 首页 > article >正文

Web应用项目开发 ——Spring Boot邮件发送

一.邮件发送介绍

邮件发送是一个非常常见的功能,注册时的身份认证、重要通知发送等都会用到邮件发送。在现代的Web应用程序中,邮件发送功能是非常常见且重要的一部分,Spring Boot框架提供了简单且强大的方式来实现邮件发送功能。Spring中提供了 JavaMailsender 用来简化邮件配置,Spring Boot则提供了MailSenderAutoConfguration 对邮件的发送做了进一步简化。下面就分步骤来看一下Spring Boot如何进行邮件发送。

二.发送前准备

1.首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。SMTP全程为Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信协议。**SpringBoot提供了对邮件发送的集成支持,使得发送邮件变得更加简单。**以下是实现步骤:
(1)通过QQ邮箱或者163邮箱开启POP3/SMTP服务,成功开启后会获取到一个授权码,保存好,之后会使用到。

**(2)**添加依赖

需要在项目的**pom.xml**文件中添加Spring Boot的邮件发送依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
**(3)**配置邮件服务器

在**application.propertiesapplication.yml**中配置邮件服务器的相关信息,例如:

(4)创建控制器:创建一个服务类来发送邮件,使用Spring Boot提供的**JavaMailSender**接口

@Component
public class MailService(
@Autowired
JavaMailSender javaMailSender;
public void sendSimpleMail (String from, String to, string cc,
                            String subject, String content)
        SimpleMailMessage simpMsg = new simpleMailMessage ();
        simpMsg new SimpleMailMessage ( )
        simpMsg.setFrom(from);
        simpMsg.setTo(to):
        simpMsg.setCc(cc);
        simpMsg.setSubject(subject);
        simpMsg.setText (content);
        javaMailSender.send(simpMsg);
    }
} ![qwqw](https://i-blog.csdnimg.cn/direct/28c3f979e67f4abab03bc2ab850b2837.png#pic_center)

代码解释:

  • JavaMailSender是Spring Boot在 MailSenderPropertiesConfiguration类中配置好的,该类在Mail自动配置类 MailSenderAutoConfiguration 中导入,因此这里注入JavaMailSende就可以使用了。
  • sendSimpleMail 方法的5个参数分别表示邮件发送者、收件人、抄送人、邮件主题以及邮件内容。
  • 简单邮件可以直接构建一个 SimpleMailMessage 对象进行配置,配置完成后,通过JavaMailSender 将邮件发送出去。

配置完成后,在单元测试中写一个测试方法进行测试,代码如下 :

@RunWith(SpringRunner.class)
@Spring BootTest
public class SendmailApplicationTests{
    @Autowired
    MailService mailService;
    @Test
    public void sendsimpleMail(){
    mailService.sendSimpleMail("youremail@qq.com","测试邮件主题","测试邮件内容);
    }
}

三.发送

(1)发送带附件的邮件:要发送一个带附件的邮件也非常容易,通过调用Atachment方法即可添加附件,该方法调用多次即可添加多个附件。在MailService 中添加如下方法:
public void sendAttachFileMail(String from, String to,
                    String subject,String content,File file)(
try(
    MimeMessage message = javaMailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper (message,true) ;
    helper.setFrom(from);
    helper.setTo(to);
    helper.setSubject(subject);
    helper.setText(content);
    helper.addAttachment(file.getName(),file);
    javaMailSender.send(message);
    } catch (MessagingException e){
    e.printStackTrace();
    }
}

这里使用 MimeMessageHelper 简化了邮件配置,它的构造方法的第二个参数true 表示构造impant mesage类型的邮件,mulipar message类型的邮件包含多个正文、附件以及内嵌资源件的表现形式更加丰富。最后通过addAtachment方法添加附件。在单元测试中添加如下方法进行测试:

@Test
public void sendAttachFileMail(){
    maiiService.sendAttachFileMail("youremail@qq.com","测试邮件主题","测试邮件内容",
    new File("文件路径"));
}
(2)发送带图片资源的邮件:有的邮件正文中可能要插入图片,使用FileSystemResource可以实现这一功能,代码如下:
public void sendMailwithImg(String from,String to,
                        String subject,String content,
                        String[] srcPath,String[] resIds){
    if(srcPath.length !=resIds.length){
        System.out.println("发送失败");
        return;
    }
    try {
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper (message,true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content,true);
        for(int i = 0; i < srcPath.length; i++) {
FileSystemResource res = new FileSystemResource(new File(srcPath[i]));
        helper.addInline(resIds[i], res);
    }
    javaMailSender.send (message);
    } catch (MessagingException e){
      System.out.println("发送失败”);
    }
}

在发送邮件时分别传入图片资源路径和资源id,通过FileSystemResource 构造静态资源,然后调用 addInline 方法将资源加入邮件对象中。注意,在调用MimeMessageHelper中的setText方法时,第二个参数true表示邮件正文是HTML格式的,该参数不传默认为false。接下来在测试类中添加如下方法进行测试:

@Test
public void sendMailwithImg(){
    mai1Service,sendMailwithImg("1510161612@qq.com""5849918430gq.com"
    "测试邮件主题(图片)",
    "<div>he110,这是一封带图片资源的邮件:"+
    "这是图片1:<div><img src='cid:p0l'/></div>" +
    "这是图片2:<dv><img src='cid:p02'/></div>" +
    "</d±v>",
     new strigl("C:\Users\sang\Pictures\pl .png",
     C:\Users\sang\Pictures\p2 ,png" },
     new String{]("p01","p02"});
}

邮件的正文是一段HTML文本,用cid标注出两个静态资源,分别为p01和p02。

四.总结

Spring Boot支持异步邮件发送,可以通过@Async注解在服务类中异步发送邮件,这样可以避免在处理用户请求时被邮件发送操作阻塞。在邮件发送过程中,应该妥善处理可能出现的异常,比如网络问题、认证失败等,以确保应用的稳定性。由于邮件发送涉及到用户名和密码,确保这些敏感信息的安全是非常重要的。可以使用Spring Boot的配置属性替换功能来隐藏这些敏感信息,或者使用环境变量和秘密管理工具来管理。Spring Boot提供了一套完整的解决方案来集成邮件发送功能,使得开发者可以轻松地在应用中实现邮件通信。


http://www.kler.cn/a/544039.html

相关文章:

  • Spring boot(maven) - Mybatis 超级入门版
  • HCIA项目实践--RIP相关原理知识面试问题总结回答
  • 和鲸科技上线 DeepSeek 系列模型服务,助力数智企业 AI 业务创新!
  • GeekPad智慧屏编程控制
  • 2.11学习记录
  • DeepSeek帮助做【真】软件需求-而不是批量刷废话
  • 游戏引擎学习第100天
  • 【狂热算法篇】并查集:探秘图论中的 “连通神器”,解锁动态连通性的神秘力量(通俗易懂版)
  • esxi添加内存条因为资源不足虚拟机无法开机——避坑
  • 尚硅谷爬虫note002
  • Android Studio 打包App问题
  • 深入理解 Scoped CSS 的限制及其穿透方法
  • Synchronized使用
  • IJCAI2022 | RPA | 利用随机补丁增强对抗样本的可转移性
  • 浅谈Java Spring Boot 框架分析和理解
  • LeetCode--二叉树前中后遍历(迭代遍历)
  • 实操部署DeepSeek,添加私有知识库
  • 【Unity3D】Unable to detect SDK in the selected directory
  • 基于单片机的电子式单项智能电表设计(论文+源码)
  • AF3 superimpose函数解读
  • 持久性HTTPVS.非持久性HTTP
  • ASP.NET Core用MediatR实现领域事件
  • 2025年02月11日Github流行趋势
  • MySQL的字符集(Character Set)和排序规则(Collation)
  • JavaScript中Map和Set数据结构详解
  • Gitlib 企业本地部署