java实现账号登录时发送邮件通知
作者:Java全栈开发工程师
1、引言
今天在逛Spring官网的时候,不经意间在SpringBoot2.5.9的特性中看到了发送邮件的功能。
上面的第二张图片就是发送邮件的相关说明文档的页面截图,在这个部分开头就说了:
Spring框架提供了一个发送邮件的接口JavaMailSender,并且提供了提供了其自动配置和starter模块,听着像是有一个专门的starter提供这个功能。
为了验证自己的猜测,回到第一张图的页面,在依赖版本页面通过Ctrl+F搜索一下是不是有名字带mail的依赖。
通过mail关键字搜索到了14个匹配项,最后果然找到了名为spring-boot-starter-mail的依赖
2、实现功能
接下来,就通过Springboot项目引入这个依赖,来实现经常会用到的账号登录的邮箱提醒功能。
第一步:创建一个springboot项目,项目名为email
第二步:修改pom.xml,添加spring-boot-starter-mail的依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <relativePath/> </parent> <groupId>com.example</groupId> <artifactId>email</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <java.version>1.8</java.version> <lombok.version>1.18.22</lombok.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
第三步:根据官网提供的代码进行改进
回到Springboot2.5.9特性的页面,点击reference documentation查看邮件的具体说明
点击了上面的链接进入了这个页面,上面一大堆文字不用管,那个Liberary dependencies可以不用看,那个依赖加不加都不影响发送邮件。
在刚刚创建的项目的根目录下创建controller包,新建一个LoginController类
package com.example.email.controller; import com.example.email.config.EmailProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; /** * @author heyunlin * @version 1.0 */ @RestController public class LoginController { private final JavaMailSender mailSender; @Autowired public LoginController(JavaMailSender mailSender) { this.mailSender = mailSender; } @GetMapping("/login") public String login(String username, String password) { // 定义日期格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); try { if (password.equals("12345")) { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message); helper.setFrom("xxx@163.com"); // 设置发送方的邮箱,这个邮箱要和配置文件里设置的username一致,否则会报错 helper.setTo(""); // 设置接收方邮箱,发送方和接收方可以是同一个邮箱。 helper.setText("您的账号" + username + " " + LocalDateTime.now().format(formatter) + "在广州登录了。"); mailSender.send(message); return "登录成功"; } else { return "登录失败,密码不正确。"; } } catch (MessagingException exception) { exception.printStackTrace(); return "登录失败," + exception.getMessage(); } } }
然后在applicatiom.yml中配置
server: port: 8081 spring: mail: port: 25 host: smtp.163.com # 发送邮件的服务器地址 default-encoding: UTF-8 username: xxx@163.com # 你的邮箱 password: xxx # 这个是授权码,不是邮箱的密码,下面会介绍怎么去获取
注意,这里的password需要登录自己的邮箱,通过修改邮箱设置来获取,会在下一个章节介绍。
这篇文章用的是网易邮箱,其他邮箱类似。这里配置的host是发送邮件的服务器地址,百度一下,这个pop是接收邮件的服务器,smtp是发送邮件的服务器。
3、获取授权码
如上图所示,登录邮箱之后,点击【设置】跳转到邮箱设置页面。
开启这两个服务中的一个就可以了,因为只需要用发送邮件的功能,也就是是SMTP服务。
点击开启按钮
接着点继续开启
使用微信扫描二维码,会自动打开发送短信的窗口,点发送就可以了,非常方便
发送短信之后,点击我已发送,这时候会得到一个授权码,因为博主已经开启过了,授权码只会显示一次,这次没有显示了。
4、测试发送邮件的功能
通过浏览器发送get请求,请求成功得到了响应
邮箱也成功收到了邮件
以上就是java实现账号登录时发送邮件通知的详细内容,更多关于java邮件通知的资料请关注脚本之家其它相关文章!