java实现账号登录时发送邮件通知

 更新时间:2023年09月18日 09:50:08   作者: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邮件通知的资料请关注脚本之家其它相关文章!

相关文章

  • Java实现ModbusTCP通信功能

    Java实现ModbusTCP通信功能

    使用ModbusTCP实现和硬件设备通信功能,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-08-08
  • 教你用Springboot实现拦截器获取header内容

    教你用Springboot实现拦截器获取header内容

    项目中遇到一个需求,对接上游系统是涉及到需要增加请求头,请求头的信息是动态获取的,需要动态从下游拿到之后转给上游,文中非常详细的介绍了该需求的实现,需要的朋友可以参考下
    2021-05-05
  • 如何用Java注解和反射实现依赖注入

    如何用Java注解和反射实现依赖注入

    这篇文章主要介绍了如何用Java注解和反射实现依赖注入,对依赖注入感兴趣的同学,可以实验一下
    2021-05-05
  • java中TESTful架构原理分析

    java中TESTful架构原理分析

    这篇文章主要介绍了对java架构中TESTful架构原理进行了详细的原理分析,有需要的朋友可以借鉴参考下,希望可以有所帮助,祝大家多多进步,早日升职加薪
    2021-09-09
  • Java Swing组件复选框JCheckBox用法示例

    Java Swing组件复选框JCheckBox用法示例

    这篇文章主要介绍了Java Swing组件复选框JCheckBox用法,结合具体实例形式分析了Swing复选框JCheckBox简单用法与相关操作注意事项,需要的朋友可以参考下
    2017-11-11
  • 基于Java中Math类的常用函数总结

    基于Java中Math类的常用函数总结

    下面小编就为大家带来一篇基于Java中Math类的常用函数总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • mybatis-plus @DS实现动态切换数据源原理

    mybatis-plus @DS实现动态切换数据源原理

    本文主要介绍了mybatis-plus @DS实现动态切换数据源原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java基于字符流形式读写数据的两种实现方法示例

    Java基于字符流形式读写数据的两种实现方法示例

    这篇文章主要介绍了Java基于字符流形式读写数据的两种实现方法示,结合实例形式分析了java逐个字符读写及使用缓冲区进行读写操作的具体实现技巧,需要的朋友可以参考下
    2018-01-01
  • Spring中的@EnableConfigurationProperties使用方式以及作用详解

    Spring中的@EnableConfigurationProperties使用方式以及作用详解

    这篇文章主要介绍了Spring中的@EnableConfigurationProperties使用方式以及作用详解,使用了 @ConfigurationProperties 注解的配置类生效,将该类注入到 IOC 容器中,交由 IOC 容器进行管理,此时则不用再配置类上加上@Component,需要的朋友可以参考下
    2024-01-01
  • Java判断两个日期相差天数的方法

    Java判断两个日期相差天数的方法

    这篇文章主要介绍了Java判断两个日期相差天数的方法,以实例形式对比分析了java进行日期换算及对比的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10

最新评论