Gmail IMAP 提取验证码 Flask 接口
部署教程
本教程从零开始,教你如何在 Linux 上部署一个 Flask 接口,通过 Gmail 的 IMAP 协议提取最新验证码邮件,并以 HTML 格式展示。
一、环境准备
1. 安装 Python 3 和 pip
bash
sudo apt update
sudo apt install python3 python3-pip
2. 安装 Flask
bash
pip3 install flask
二、配置 Gmail
1. 开启 IMAP
点击右上角齿轮图标 → 查看所有设置
切换到「转发和 POP/IMAP」
开启 IMAP 访问
保存更改
2. 开启两步验证 + 创建应用专用密码
打开 https://myaccount.google.com/security
启用“两步验证”
启用后会看到“应用专用密码”选项:
创建应用专用密码
应用选择 Mail,设备填写 Other(自定义),填例如 IMAP script
会生成一个 16 位专用密码,复制保存(只显示一次)
三、创建 mail_api.py 文件
新建 mail_api.py 文件,内容如下:
from flask import Flask, request, Response
import imaplib
import email
app = Flask(__name__)
@app.route("/Mail")
def get_mail():
mail_address = request.args.get("mail")
password = request.args.get("password")
if not mail_address or not password:
return "❌ 请输入邮箱和密码!"
try:
# 连接 Gmail IMAP
mail = imaplib.IMAP4_SSL("imap.gmail.com", 993)
mail.login(mail_address, password)
mail.select("inbox")
# 获取最新的一封邮件
result, data = mail.search(None, "ALL")
mail_ids = data[0].split()
latest_email_id = mail_ids[-1] # 取最新的一封邮件
result, data = mail.fetch(latest_email_id, "(RFC822)")
raw_email = data[0][1] # 邮件原始内容
msg = email.message_from_bytes(raw_email)
# 获取邮件 HTML 内容
email_body = None
if msg.is_multipart():
for part in msg.walk():
content_type = part.get_content_type()
if content_type == "text/html":
email_body = part.get_payload(decode=True).decode("utf-8", errors="ignore")
break
else:
email_body = msg.get_payload(decode=True).decode("utf-8", errors="ignore")
if email_body:
return Response(email_body, mimetype="text/html")
else:
return "❌ 未找到 HTML 格式的邮件内容!"
except Exception as e:
return f"❌ 发生错误:{e}"
if name == "__main__":
app.run(host="0.0.0.0", port=233)
四、运行 Flask 接口服务
使用 nohup 后台运行:
bash
nohup python3 mail_api.py > mail_api.log 2>&1 &
查看运行状态:
bash
netstat -tulnp | grep 233
查看日志:
bash
cat mail_api.log
五、测试接口
浏览器打开以下格式的链接:
http://服务器IP:233/Mail?token=6699&mail=你的邮箱地址&password=应用专用密码
示例:
http://123.123.123.123:233/Mail?token=6699&mail=youremail@gmail.com&password=abcd efgh ijkl mnop
六、常见问题 FAQ
Q1: python: command not found
解决方法:
bash
python3 mail_api.py
如果你输入了 python 报错,请用 python3 替代。
Q2: 页面返回 JSON 或乱码?
确保你用的是最新版本的 mail_api.py 脚本(返回的是 HTML),否则会显示 JSON。
同时检查浏览器 URL 拼写正确。
Q3: 如何重启 Flask 服务?
查找进程:
bash
ps aux | grep mail_api.py
杀掉进程:
bash
kill -9 进程号
重新启动:
bash
nohup python3 mail_api.py > mail_api.log 2>&1 &
Q4: 如何长期运行或开机自启?
推荐用 systemd 或 supervisor 管理后台服务,避免意外关闭。
Q5: 登录 Gmail 报错?
请确保:
已启用 IMAP、
使用的是 应用专用密码,不是你的 Gmail 登录密码
两步验证必须已开启才能生成专用密码