java实现一个简单的账号登录时的邮件通知功能

1、引言

今天在逛Spring官网的时候,不经意间在SpringBoot2.5.9的特性中看到了发送邮件的功能。

java实现一个简单的账号登录时的邮件通知功能_第1张图片

java实现一个简单的账号登录时的邮件通知功能_第2张图片

上面的第二张图片就是发送邮件的相关说明文档的页面截图,在这个部分开头就说了:

Spring框架提供了一个发送邮件的接口JavaMailSender,并且提供了提供了其自动配置和starter模块,听着像是有一个专门的starter提供这个功能。

为了验证自己的猜测,回到第一张图的页面,在依赖版本页面通过Ctrl+F搜索一下是不是有名字带mail的依赖。

java实现一个简单的账号登录时的邮件通知功能_第3张图片

 通过mail关键字搜索到了14个匹配项,最后果然找到了名为spring-boot-starter-mail的依赖

java实现一个简单的账号登录时的邮件通知功能_第4张图片

2、实现功能

接下来,就通过Springboot项目引入这个依赖,来实现经常会用到的账号登录的邮箱提醒功能。

第一步:创建一个springboot项目,项目名为email

第二步:修改pom.xml,添加spring-boot-starter-mail的依赖



    4.0.0

    
        org.springframework.boot
        spring-boot-starter-parent
        2.3.4.RELEASE
        
    

    com.example
    email
    0.0.1-SNAPSHOT

    
        1.8
        1.18.22
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
        
            org.projectlombok
            lombok
            ${lombok.version}
        

        
            org.springframework.boot
            spring-boot-starter-mail
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

第三步:根据官网提供的代码进行改进

回到Springboot2.5.9特性的页面,点击reference documentation查看邮件的具体说明

java实现一个简单的账号登录时的邮件通知功能_第5张图片

点击了上面的链接进入了这个页面,上面一大堆文字不用管,那个Liberary dependencies可以不用看,那个依赖加不加都不影响发送邮件。

java实现一个简单的账号登录时的邮件通知功能_第6张图片

在刚刚创建的项目的根目录下创建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("[email protected]"); // 设置发送方的邮箱,这个邮箱要和配置文件里设置的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: [email protected] # 你的邮箱
    password: xxx         # 这个是授权码,不是邮箱的密码,下面会介绍怎么去获取

注意,这里的password需要登录自己的邮箱,通过修改邮箱设置来获取,会在下一个章节介绍。

这篇文章用的是网易邮箱,其他邮箱类似。这里配置的host是发送邮件的服务器地址,百度一下,这个pop是接收邮件的服务器,smtp是发送邮件的服务器。

java实现一个简单的账号登录时的邮件通知功能_第7张图片

3、获取授权码

java实现一个简单的账号登录时的邮件通知功能_第8张图片

如上图所示,登录邮箱之后,点击【设置】跳转到邮箱设置页面。

开启这两个服务中的一个就可以了,因为只需要用发送邮件的功能,也就是是SMTP服务。

java实现一个简单的账号登录时的邮件通知功能_第9张图片

点击开启按钮

java实现一个简单的账号登录时的邮件通知功能_第10张图片

接着点继续开启

java实现一个简单的账号登录时的邮件通知功能_第11张图片

使用微信扫描二维码,会自动打开发送短信的窗口,点发送就可以了,非常方便

发送短信之后,点击我已发送,这时候会得到一个授权码,因为博主已经开启过了,授权码只会显示一次,这次没有显示了。

java实现一个简单的账号登录时的邮件通知功能_第12张图片

4、测试发送邮件的功能

通过浏览器发送get请求,请求成功得到了响应

java实现一个简单的账号登录时的邮件通知功能_第13张图片

邮箱也成功收到了邮件

java实现一个简单的账号登录时的邮件通知功能_第14张图片

好了,这篇文章就分享到这里了,案例代码已经上传到了gitee,可按需获取~

java实现一个简单的账号登录时的邮件通知功能icon-default.png?t=N7T8https://gitee.com/he-yunlin/email.git

你可能感兴趣的:(java,开发语言)