邮箱发送验证码以及验证码的验证

本文介绍了如何通过用户名从数据库获取邮箱,使用EmailConfig和PropertiesConfig帮助类发送验证码到用户邮箱,然后将验证码存储在session中。后续通过前端传回的验证码与session中的验证码进行比对,用于用户注册或忘记密码的邮箱验证。调试采用了Swagger。
摘要由CSDN通过智能技术生成

1.本篇文章的代码原理是根据前端传来的用户名到数据库中取对应的邮箱,并通过邮箱帮助类向邮箱发送验证码,将验证码存在session中,最后通过前端传过来的验证码与存在session中的验证码进行比较,如果相同则进行下一步(用户注册时的邮箱验证或者后面面的忘记密码)。

2.调试后台API用的是Swagger

3.用到的依赖:

<!-- javaMail -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.6</version>
</dependency>

1.帮助类(即放到utils包下的类) 

1.1EmailConfig

public class EmailConfig {
//发送邮件的方法
    public static void sendEmail(String toEmailAddress, String emailTitle, String emailContent) throws Exception {

        //读取配置文件中的配置信息
        String emailSMTPHost = PropertiesConfig.getEmailKey("emailSMTPHost");
        String emailSMTPPort = PropertiesConfig.getEmailKey("emailSMTPPort");
        String emailAccount = PropertiesConfig.getEmailKey("emailAccount");
        String emailPassword = PropertiesConfig.getEmailKey("emailPassword");


        Properties pros = new Properties();
        //采用debug调试
        pros.setProperty("mail.debug", "true");
        //身份验证
        pros.setProperty("mail.smtp.auth", "true");
        //邮箱端口号,QQ一般为456或者587
        pros.put("mail.smtp.port", emailSMTPPort);
        //设置邮件服务器的主机名,就是那个服务器地址
        pros.setProperty("mail.smtp.host", emailSMTPHost);
        //选择发送邮件的协议
        pros.setProperty("mail.transport.protocol", "smtp");


        //SSL认证,这个主要看邮箱是否基于SSL加密,加密的话需要开启才可以使用
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        //这边需要设置是否使用SSL安全连接
        pros.put("mail.smtp.ssl.enable", "true");
        pros.put("mail.smtp.ssl.socketFactory", sf);

        //创建一个session回话
        Session session = Session.getInstance(pros);

        
可以使用Python的smtplib和random库来实现发送验证码邮箱的功能,然后使用tkinter来实现用户输入验证码的界面和验证功能。 以下是一个简单的示例代码: ```python import smtplib import random from tkinter import * # 邮件服务器地址和端口 SMTP_SERVER = 'smtp.gmail.com' SMTP_PORT = 587 # 发送邮箱和密码 SENDER_EMAIL = '你的邮箱地址' SENDER_PASSWORD = '你的邮箱密码' # 验证码长度 CODE_LENGTH = 6 # 邮件内容模板 EMAIL_TEMPLATE = '你的验证码是:{}' # 生成随机验证码 def generate_code(length): code = '' for i in range(length): code += str(random.randint(0, 9)) return code # 发送邮件 def send_email(to_email, code): try: server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) server.starttls() server.login(SENDER_EMAIL, SENDER_PASSWORD) subject = '验证码' body = EMAIL_TEMPLATE.format(code) message = f'Subject: {subject}\n\n{body}' server.sendmail(SENDER_EMAIL, to_email, message) server.quit() return True except: return False # 验证验证码 def verify_code(code, input_code): return code == input_code # 发送验证码并显示界面 def send_code(): # 生成随机验证码 code = generate_code(CODE_LENGTH) # 发送邮件 to_email = email_entry.get() if send_email(to_email, code): # 显示验证码输入界面 email_frame.pack_forget() code_frame.pack() code_label.config(text=f'验证码发送至 {to_email}') # 设置验证函数 verify_func = lambda: verify(code) # 设置焦点 code_entry.focus() else: # 显示错误信息 error_label.config(text='发送失败,检查邮箱地址') # 验证验证码并关闭窗口 def verify(code): input_code = code_entry.get() if verify_code(code, input_code): # 验证成功,关闭窗口 root.destroy() else: # 验证失败,显示错误信息 error_label.config(text='验证码错误,重新输入') code_entry.delete(0, END) code_entry.focus() # 创建主窗口 root = Tk() root.title('发送验证码') # 创建邮箱输入界面 email_frame = Frame(root) email_label = Label(email_frame, text='输入邮箱地址:') email_entry = Entry(email_frame) email_button = Button(email_frame, text='发送验证码', command=send_code) error_label = Label(email_frame, fg='red') email_label.pack() email_entry.pack() email_button.pack() error_label.pack() # 创建验证码输入界面 code_frame = Frame(root) code_label = Label(code_frame) code_entry = Entry(code_frame, show='*') code_button = Button(code_frame, text='验证', command=verify) error_label = Label(code_frame, fg='red') code_label.pack() code_entry.pack() code_button.pack() error_label.pack() # 将邮箱输入界面放到窗口中 email_frame.pack() # 进入主循环 root.mainloop() ``` 使用时,只需要将代码中的`SENDER_EMAIL`和`SENDER_PASSWORD`替换为你自己的邮箱地址和密码即可。运行程序后,输入发送验证码邮箱地址,点击发送验证码按钮即可发送验证码发送成功后,程序显示一个新的界面,要求输入验证码输入验证码后点击验证按钮,如果验证码正确,程序自动关闭窗口,否则提示验证码错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值