使用SpringBoot发送邮件,就是这么容易

createh53周前 (12-15)技术教程17



前言

Hi,大家好,我是希留。

在项目的开发工程中,经常有需要发送邮件的功能场景,比如,通过邮件注册、认证、找回密码、系统报警通知、报表信息等。那遇到这种功能的时候应该怎么去做呢?
本篇文章带大家通过SpringBoot快速实现一个发送邮件的功能。如果对你有帮助的话,还不忘点赞支持一下,感谢!文末附有源码

目录


  • 一、实现效果图
  • 二、常用的邮件协议简介
  • 三、获取邮箱授权码
  • 四、代码实现



一、实现效果图
无图无真相,话不多说,先上效果图。



二、常用的邮件协议简介
●SMTP协议
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
●POP3协议
POP3(Post Office Protocol 3,邮局协议的第3个版本)规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件。POP3服务器则是遵循POP3协议的接收邮件服务器,主要用来接收电子邮件。
●IMAP协议
IMAP(Internet Mail Access Protocol,交互式邮件存取协议)是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。

三、获取邮箱授权码
因为各大邮件都有其对应安全系统,不是项目中想用就可以用的,我们必须要拿到其对应的客户端授权码才行,拿到授权码,在项目中配置SMTP服务协议以及主机配置账户 ,就可以在项目中使用各大邮件运营商进行发送邮件了。本文中仅展示163邮箱获取客户端授权码的步骤,其他的邮件基本都类似。

1)登陆163邮箱,查看服务是否开启,如未开启则点击开启

2)点击新增授权密码,会让你使用当前邮箱账号绑定的手机号 发送一条短信确认

3)发送后,确认成功后,便可获取到客户端授权码了(请复制下来保存好,点确定后就看不到了),我们在拿到授权码后,就可以在我们Springboot工程中的配置文件 aplication.yml 或者properties文件中配置了

四、代码实现

1)引入依赖

<dependency>

	<groupId>org.springframework.boot</groupId>

	<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!--springboot邮件-->

<dependency>

	<groupId>org.springframework.boot</groupId>

	<artifactId>spring-boot-starter-mail</artifactId>

</dependency>

<!--模版引擎-->

<dependency>

	<groupId>org.springframework.boot</groupId>

	<artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

2)编码

@Autowired

    private JavaMailSenderImpl javaMailSender;

			

     private void mimeSendMail(MailVo mailVo) {

        try {

            //使用JavaMail创建一个MimeMessage

            MimeMessage mimeMessage =                               javaMailSender.createMimeMessage();

            //创建MimeMessageHelper对象,用来添加发送信息

            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);

            //赋值发送信息

            mimeMessageHelper.setFrom(this.getMailSendFrom());

            mimeMessageHelper.setTo(mailVo.getTo().split(","));

            mimeMessageHelper.setSubject(mailVo.getSubject());

            mimeMessageHelper.setText(mailVo.getText());

            if (StringUtils.hasText(mailVo.getCc())) {

                mimeMessageHelper.setCc(mailVo.getCc().split(","));

            }

            if (StringUtils.hasText(mailVo.getBcc())) {

                mimeMessageHelper.setCc(mailVo.getBcc().split(","));

            }

            if (mailVo.getMultipartFiles() != null) {

                for (MultipartFile multipartFile : mailVo.getMultipartFiles()) {

                    mimeMessageHelper.addAttachment(multipartFile.getOriginalFilename(), multipartFile);

                }

            }

            if (mailVo.getSentDate() == null) {

                mailVo.setSentDate(new Date());                                  mimeMessageHelper.setSentDate(mailVo.getSentDate());

            }

            javaMailSender.send(mimeMessageHelper.getMimeMessage());

            mailVo.setStatus("ok");

            logger.info("发送邮件成功:{}->{}", mailVo.getFrom(), mailVo.getTo());



        } catch (Exception e) {

            throw new RuntimeException(e);

        }

    }

3)配置yml

spring:

  mail:

    host: smtp.163.com #SMTP

    username: XXXXX@163.com #发送方邮箱账号

    password: XXXXX #授权码

    properties:

      from: XXXXX@163.com #

  thymeleaf:

    cache: false

    prefix: classpath:/views/

  servlet:

    multipart:

      max-file-size: 10MB #单文件大小限制

      max-request-size: 50MB #总文件大小限制


结语

以上就是今天要讲的内容,本文详细介绍了使用SpringBoot实现发送邮件功能的配置以及代码实现。

喜欢的朋友,欢迎点赞支持一下。

Github地址:http://github.co/277769738/java-sjzl-demo
Gitee地址:http://gitee.com/huoqstudy/java-sjzl-demo

相关文章

Java 发送邮件

使用Java应用程序发送E-mail十分简单,但是首先你应该在你的机器上安装JavaMail API 和Java Activation Framework (JAF) 。 你可以在 JavaMail...

钓鱼邮件是怎么实现的?

我们可能会收到一些钓鱼邮件,今天就说说这种邮件是怎么实现的,专门去百度了一下具体的定义,放出来给大家看看。按照道理来说,学习了本文,你也就可以去发钓鱼邮件了,但是不能做坏事哈!钓鱼邮件指利用伪装的电邮...

阿里云ECS服务禁用25端口导致邮件发送失败

报错信息:MailConnectException: Couldn't connect to host, port: smtp.mxhichina.com, 25解决方案网上查询共两种方案,博...

使用这个jar包,不到10分钟便可接入短信及邮件发送功能!

最近在给我的AI工具(https://ai.quanyouhulian.com/)新增个**短信及邮箱登录功能,按传统方式,一般是在后端引入各短信服务商SDK-jar包,以及短信邮件的maven包(j...

阿里二面:说下如何基于SpringBoot发送邮件?

在我们实际业务开发中邮件发送其实是一个非常常见的需求,用户注册,找回密码等地方都会用到,使用JavaSE代码发送邮件步骤还是挺繁琐的。SpringBoot中对于邮件发送,提供了相关的自动化配置类,使得...

Java二十周年特别策划——谈谈我与Java的那些年、这些事

Java作为当今最流行的编程技术之一,它的出现不仅给软件产业带来了深远影响,也改变了许多人的人生轨迹。得益于其技术平台的通用性、高效性、平台移植性和安全性,许多企业纷纷选用Java作为技术支撑,获得了...