Gmail IMAP 提取验证码 Flask 接口 部署教程

Administrator 15 2025-04-09

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

登录 https://mail.google.com

点击右上角齿轮图标 → 查看所有设置

切换到「转发和 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 登录密码

两步验证必须已开启才能生成专用密码