Springboot发送邮件功能的实现详解

 更新时间:2022年09月21日 14:14:30   作者:天海奈奈  
电子邮件是—种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。本文详细为大家介绍了SpringBoot实现发送电子邮件功能的示例代码,需要的可以参考一下

前言

大多数小伙伴在练习与学习的过程中在验证时大都使用或验证码,但是验证码相对而言自己的参与只停留在自己的自己写的点击刷新方法上,那有没有什么方法能让我们的互动不止限于网页呢,那就来学一下如何给自己发送一封邮件吧,这个功能我预想是跟用户绑定的所以设计时会与用户有一定的联系。

成果展示

表设计

这里只是为了让我们成功发送邮件所以并不用设计的多么复杂,只需要在用户表中添加两个字段username ,email_address 实体类中是String 表中是varchar.

引入依赖

<!--        邮件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
            <version>2.3.4.RELEASE</version>
        </dependency>
    </dependencies>

邮箱工具类

/**
 * 描述 工具 检验地址是否合法
 */
public class EmailUtil {
    public static boolean isValidEmailAddress(String email) throws AddressException {
        boolean result = true;
        InternetAddress internetAddress = new InternetAddress(email);
        try {
            internetAddress.validate();
        } catch (AddressException e) {
            e.printStackTrace();
            result = false;
        }
        return  result;
    }
}

这里并不需要自己去写校验方法,直接调用InternetAddress 的validate方法就行。

mapper

用来通过邮箱查询用户,看是否已被占用

User selectOneByEmailAddress(String emailAddress);

Xml

  <select id="selectOneByEmailAddress" parameterType="java.lang.String" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List"/>
    from xatu_mall_user
    where email_address = #{email_address,jdbcType=VARCHAR}
    limit 1
  </select>

Service

userService

boolean checkEmailRegistered(String emailAddress);

impl

 @Override
    public boolean checkEmailRegistered(String emailAddress) {
        User user = userMapper.selectOneByEmailAddress(emailAddress);
        if (user != null) {
            return false;
        }
        return true;
    }

EmailService

public interface EmailService {
    void sendSimpleMessage(String to, String subject, String text);
}

Impl

/**
 * 描述:     EmailService实现类
 */
@Service
public class EmailServiceImpl implements EmailService {
    @Autowired
    private JavaMailSender mailSender;
    @Override
    public void sendSimpleMessage(String to, String subject, String text) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(Constant.EMAIL_FROM);
        simpleMailMessage.setTo(to);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(text);
        mailSender.send(simpleMailMessage);
    }
}

我把常用值写在Constant里了,这里直接填用来发送的邮箱就行,要确保能自己能登陆这个邮箱,后面要去获取一个码。

Controller

 @PostMapping("/sendEmail")
    @ResponseBody
    public ApiRestResponse sendEmail(@RequestParam("emailAddress") String emailAddress)
            throws XatuMallException, AddressException {
        //检查邮件地址是否有效,检查是否已注册
        boolean validEmailAddress = EmailUtil.isValidEmailAddress(emailAddress);
        if(validEmailAddress) {
            boolean emailPased = userService.checkEmailRegistered(emailAddress);
            if (!emailPased) {
                return ApiRestResponse.error(100018, "邮箱已注册");
            } else{
                //发送邮件
                emailService.sendSimpleMessage(emailAddress,"主题是测试","Helllo this is a E-mail");
                return ApiRestResponse.success();
            }
        }else{
            return ApiRestResponse.error(100020,"非法邮箱");
        }
    }

写完后要去进行配置

application.properties

spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=1228625399@qq.com
spring.mail.password=*****************
spring.mail.default-encoding=utf-8
spring.mail.properties.mail.smtp.auth=true

这里我使用的是qq邮箱,但是听说他这个垃圾邮件判定等级自己不好改有的是用阿里云邮箱

只用注意两个点 username 写自己的邮箱地址

获取授权码

下一个password不是邮箱密码哈,下面说怎么获取这个授权码

进去登录好了以后点击账户,找到下面这个区域

注意我们打开前两个 然后扫码获取那个授权码,把它复制下来添加到配置文件的password栏。

总结

这个技术是很简单的,但是用好它相比于普通的在网页上加验证码我们先声明一个数组,调用函数去把数组打乱去去每次获取验证码,把验证码存起来作为text发送到用户邮箱用来注册,这个方法相比点击验证码就更加有趣了。当然也能用于其他更多的方面~

到此这篇关于Springboot发送邮件功能的实现详解的文章就介绍到这了,更多相关Springboot发送邮件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis mapping类基本用法

    MyBatis mapping类基本用法

    这篇文章主要为大家介绍了MyBatis mapping类基本用法示例详解,
    有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 解析Spring框架中的XmlBeanDefinitionStoreException异常情况

    解析Spring框架中的XmlBeanDefinitionStoreException异常情况

    这篇文章主要介绍了解析Spring框架中的XmlBeanDefinitionStoreException异常情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 基于JDBC封装的BaseDao(实例代码)

    基于JDBC封装的BaseDao(实例代码)

    下面小编就为大家带来一篇基于JDBC封装的BaseDao(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • Java并发编程示例(一):线程的创建和执行

    Java并发编程示例(一):线程的创建和执行

    这篇文章主要介绍了Java并发编程示例(一):线程的创建和执行,本文是系列文章的第一篇,需要的朋友可以参考下
    2014-12-12
  • 利用Java截取String字符串的几种常用方法

    利用Java截取String字符串的几种常用方法

    在开发应用中经常会使用到java string,这篇文章主要给大家介绍了关于利用Java截取String字符串的几种常用方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • Java常用时间工具类总结(珍藏版)

    Java常用时间工具类总结(珍藏版)

    这篇文章主要为大家详细介绍了Java中一些常用时间工具类的使用示例代码,文中的代码简洁易懂,对我们学习Java有一定帮助,需要的可以参考一下
    2022-07-07
  • java如何在应用代码里捕获线程堆栈

    java如何在应用代码里捕获线程堆栈

    这篇文章主要为大家介绍了java如何在应用代码里捕获线程堆栈实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • java8中@Contended注解的使用

    java8中@Contended注解的使用

    本文主要介绍了java8中@Contended注解的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 通过实例了解Java 8创建Stream流的5种方法

    通过实例了解Java 8创建Stream流的5种方法

    这篇文章主要介绍了通过实例了解Java 8创建Stream流的5种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • SpringBoot的@Value给静态变量注入application.properties属性值

    SpringBoot的@Value给静态变量注入application.properties属性值

    这篇文章主要介绍了SpringBoot的@Value给静态变量注入application.properties属性值,Spring是一个开源的框架,主要是用来简化开发流程,通过IOC,依赖注入(DI)和面向接口实现松耦合,需要的朋友可以参考下
    2023-05-05

最新评论