SpringBoot整合QQ邮箱发送验证码

1.项目介绍

基于SpringBoot + QQ邮箱服务 + Hutools实现的获取验证码功能,接下来从如何申请授权码,如何配置项目,如何启动项目,如何测试项目进行讲解,下面的图片是一个测试案例,使用postman进行测试,在测试上填写发送人的邮箱,即可收到验证码邮箱

img

2.使用前提

1.从仓库拉取代码

2.需要申请邮箱的授权码,然后在application.yml下进行配置

3.邮箱授权码申请

1.开启POP3/SMTP服务

image-20230925173427366

点击设置,进入下面的页面,然后再点击账号

image-20230925173455186

往下滑,找到下面的服务,点击申请授权码,按照提示一步步完成

image-20230925173604188

2.复制授权码

image-20230925173914347

4.项目使用说明

1.可以自己手写代码,也可以从我的仓库直接拉取代码

2.配置application配置文件,修改username改为自己的邮箱,password改为邮箱授权码,详细介绍查看代码说明下的配置文件

3.启动项目SendemailcodeApplication

4.使用postman进行测试

1.拉取仓库代码:

git clone https://gitee.com/tzmoxi/use-email-getcode.git

2.修改配置文件

修改application.yml下的配置文件,修改成为自己的邮箱和授权码

image-20230925232720765

3.修改完成上面的内容,就直接启动项目

image-20230925232831791

4.使用postman测试

首先是get请求,填写请求地址localhost:8080/user/getCode,传递的参数为tos值为接收方邮箱,点击发送即可收到

image-20230925233457586

点击发送,成功后,邮箱会收到一个验证码

image-20230925233647622

5.代码说明

1.创建一个SpringBoot工程

2.引入邮件相关依赖

注意:springboot相关的依赖给去掉了,在创建工程的时候会自动引入

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>


        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.16</version>
        </dependency>


        <!--   发送邮件     -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

3.配置application.yml文件

username和password需要使用自己的

username事自己的qq邮箱

password是刚昂申请的邮箱授权码

Spring:
  # 邮箱基本配置
  mail:
    host: smtp.qq.com
    # 填写自己的邮箱
    username: 111111111111@qq.com
    # 在邮箱内填写自己申请的授权码
    password: aaaaaaaaaaaa
    # 端口号
    port: 587
    # 默认的邮件编码为UTF-8
    default-encoding: UTF-8
    # 其他参数
    properties:
      mail:
        # 配置SSL 加密工厂
        smtp:
          ssl:
            # 本地测试, 先放开ssl
            enable: false
            required: false
          #开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误
        debug: false
server:
  port: 8080

4.定义实体类

@Data
@AllArgsConstructor
public class ToEmail implements Serializable {

   //邮件接受方

    private String tos;

   //邮件主题

    private String subject;


   //邮件内容

    private String content;
}

5.邮件服务也是核心

public class MailService {
    /**
     * 注入邮件工具类
     */
    @Resource
    private JavaMailSenderImpl javaMailSender;

    @Value("${spring.mail.username}")
    private String sendMailer;

    /**
     * 检测邮件信息类
     * @param receiveEmail 接收者
     * @param subject  主题
     * @param emailMsg 内容
     */
    private void checkMail(String receiveEmail, String subject, String emailMsg){
        //  StringUtils 需要引入  commons-lang3 依赖
        //  可以用 receiveEmail == null || receiveEmail.isEmpty() 来代替
        if(StringUtils.isEmpty(receiveEmail)) {
            throw new RuntimeException("邮件收件人不能为空");
        }
        if(StringUtils.isEmpty(subject)) {
            throw new RuntimeException("邮件主题不能为空");
        }
        if(StringUtils.isEmpty(emailMsg)) {
            throw new RuntimeException("邮件内容不能为空");
        }
    }
    
    /**
     * 发送纯文本邮件
     * @param receiveEmail 接收者
     * @param subject  主题
     * @param emailMsg 内容
     */
    public Boolean sendTextMail(String receiveEmail, String subject, String emailMsg) {
        // 参数检查
        checkMail(receiveEmail, subject, emailMsg);
        try {
            // true 代表支持复杂的类型
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(javaMailSender.createMimeMessage(), true);
            // 邮件发件人
            mimeMessageHelper.setFrom(sendMailer);
            // 邮件收件人
            mimeMessageHelper.setTo(receiveEmail.split(","));
            // 邮件主题
            mimeMessageHelper.setSubject(subject);
            // 邮件内容
            mimeMessageHelper.setText(emailMsg);
            // 邮件发送时间
            mimeMessageHelper.setSentDate(new Date());
    
            // 发送邮件
            javaMailSender.send(mimeMessageHelper.getMimeMessage());
            System.out.println("发送邮件成功: " + sendMailer + "-->" + receiveEmail);
            return true;
        } catch (MessagingException e) {
            e.printStackTrace();
            System.out.println("发送邮件失败: " + e.getMessage());
            return false;
        }
    }
}

6.编写控制层

@RestController
@RequestMapping("/user")
public class EmailController {

    @Resource
    private MailService mailService;

    @RequestMapping("/getCode")
    public R sendEmail(ToEmail toEmail, HttpServletRequest request) {
        if(toEmail == null || toEmail.getTos() == null ) {
            return R.error( "参数错误!");
        }
        toEmail.setSubject("你本次的验证码是");
        // 使用hutools工具获取验证码
        CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20);
        String verCode = captcha.getCode();
        String content = "尊敬的xxx,您好:\n"
                + "\n本次请求的邮件验证码为:" + verCode + ",本验证码 5 分钟内效,请及时输入。(请勿泄露此验证码)\n"
                + "\n如非本人操作,请忽略该邮件。\n(这是一封通过自动发送的邮件,请不要直接回复)";
        toEmail.setContent(content);

        Boolean check = mailService.sendTextMail(toEmail.getTos(), toEmail.getSubject(), toEmail.getContent());
        if(check) {
            return R.success("发送成功");
        } else {
            return R.error( "发送失败");
        }

    }
}

6.Git仓库地址

基于SpringBoot实现邮箱发送验证码仓库地址

更多内容查看:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot整合QQ邮箱,首先需要导入邮件依赖包,并在配置文件中设置相关信息。具体步骤如下: 1. 在项目的pom.xml文件中添加spring-boot-starter-mail依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 2. 在application.yaml(或application.properties)配置文件中添加QQ邮箱的相关信息,包括用户名(即QQ邮箱账号)、密码(即QQ邮箱的授权码)、以及SMTP服务器地址和端口号: ``` spring.mail.username=your@qq.com spring.mail.password=your-password spring.mail.host=smtp.qq.com spring.mail.properties.mail.smtp.ssl.enable=true ``` 请注意替换上述代码中的"your@qq.com"和"your-password"为你自己的邮箱账号和授权码。 3. 编写发送邮件的方法,可以使用JavaMailSender来发送简单文字邮件或复杂类型邮件。示例代码如下: ``` // 导入JavaMailSender相关的包和类 import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; // 在需要发送邮件的地方注入JavaMailSender @Autowired private JavaMailSender mailSender; // 发送简单文字邮件的方法 public void sendSimpleEmail() { SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setSubject("邮件主题"); mailMessage.setText("邮件内容"); mailMessage.setTo("receiver@qq.com"); mailMessage.setFrom("sender@qq.com"); mailSender.send(mailMessage); } // 发送复杂类型邮件的方法 public void sendComplexEmail() throws MessagingException { MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setSubject("邮件主题"); helper.setText("<p style='color:red'>邮件内容</p>", true); helper.addAttachment("附件名称", new File("附件路径")); helper.setTo("receiver@qq.com"); helper.setFrom("sender@qq.com"); mailSender.send(mimeMessage); } ``` 请注意将上述示例代码中的"your@qq.com"替换为你自己的邮箱地址。 通过以上步骤,你就可以在Spring Boot中成功整合QQ邮箱发送邮件了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringBoot整合邮件任务(qq为例)](https://blog.csdn.net/qq2844509367/article/details/127500442)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值