用 API 购买短效 Gmail 并读取收件箱
谷歌邮箱 API 购买,在 OTPGmail 就是调用 /v1/mail-shop 这组接口:先查类型和报价,带上 Idempotency-Key 下单,轮询订单直到交付完成,再取出邮箱、密码等登录信息;支持读取收件箱的账号,还能用接口直接读最近的邮件。网页上“购买短效 Gmail”能做的事,API 都能做。
适合需要在自己的测试脚本或内部工具里自动拿到可登录 Gmail 的开发者,比如测试网站的“使用 Google 登录”。这里买的是账号本身;如果你只想收某个网站的验证码,那是另一组租用接口,见用 Python 接收邮箱验证码。
先分清:“邮箱 API”在这里指什么
“邮箱 API 取件”“邮箱 API 收件”在不同地方意思不一样。在一些发卡店的商品说明里,这类字样常常指附带了某种令牌、可以用接口收信的邮箱(多为 Outlook 一类),卖家自己定义格式。在 OTPGmail,它指的是两件具体的事:
| 你想做的事 | 用哪组接口 | 你得到什么 |
|---|---|---|
| 买一个能登录的短效 Gmail | /v1/mail-shop |
账号本身:邮箱、密码,视类型附带辅助邮箱、快速登录链接或 Cookie |
| 读取买到的账号最近收到的邮件 | /v1/mail-shop/orders/{id}/items/{lineNo}/inbox |
发件人、标题、时间,以及提取出的验证码或链接 |
| 只收某个网站发来的一个验证码 | /v1/orders(租用) |
一个地址的收码权,没有密码,不能登录 |
准备:API 密钥和余额
- 登录后打开“API 文档”页面,在“你的 API 密钥”一栏点“复制密钥”。密钥以
og_开头,放在请求头Authorization: Bearer <密钥>里,只放在服务器或 CI 中。 - 先给余额充值。购买时整单金额立即从余额扣除。
- 接口里的金额字段(名字带
Vnd)都是整数,单位和账户余额相同(越南盾)。API 返回的价格就是实际扣费的价格,和网页一致;你的账户如果有专属价格,API 也按专属价格计算。
用 API 购买 Gmail:查类型、报价、下单、轮询的完整 Python
import time, uuid, requests
HOST = "otpgmail.net"
API = f"https://{HOST}/v1/mail-shop"
H = {"Authorization": "Bearer og_YOUR_API_KEY"}
# 1. 查有哪些类型;available 为 false 的不要下单
for p in requests.get(f"{API}/products", headers=H, timeout=30).json()["data"]:
print(p["code"], p["name"], p["priceVnd"], p["maxQty"], p["available"])
# 2. 报价:整单按数量达到的阶梯计价
q = requests.get(f"{API}/quote", params={"product": "gm_used", "quantity": 3},
headers=H, timeout=30).json()["data"]
print("单价", q["unitPriceVnd"], "合计", q["totalVnd"])
# 3. 下单:Idempotency-Key 必填;超时重试时沿用同一个 key,不会重复扣费
key = str(uuid.uuid4())
r = requests.post(f"{API}/orders", json={"product": "gm_used", "quantity": 3},
headers={**H, "Idempotency-Key": key}, timeout=60)
body = r.json()
if not body["success"]:
raise SystemExit(f'{r.status_code} {body["error"]["code"]}')
order = body["data"]
# 4. queued / processing 时每 5 秒查一次,直到最终状态
while order["status"] in ("queued", "processing"):
time.sleep(5)
order = requests.get(f"{API}/orders/{order['id']}", headers=H, timeout=30).json()["data"]
print(order["status"], "已交付", order["deliveredCount"], "退款", order["refundVnd"])
for it in order["items"]:
print(it["lineNo"], it["email"], it["password"], it["recovery"] or "-", it["inbox"])
几个容易踩的点:
- 类型代码以接口返回为准。示例里的
gm_used是“已用于数个服务”类型;每个类型的说明(description)和条款(terms)都在商品列表里,下单前读一遍。 - 下单请求会等交付,最长十几秒,所以客户端超时至少设 60 秒。超时后用同一个
Idempotency-Key重发,拿回的是同一个订单;换一个新 key 就是再买一次。 - 按字段取值:账号信息在
items[]里,按email、password、recovery、loginUrl、cookies这些字段读,不要去拆rawLine。 - 下载文件:
GET /v1/mail-shop/orders/{id}/download返回 .txt 文本,一行一个账号,和网页上“下载 .txt”得到的文件一样。
订单状态与自动退款
status |
含义 | 你要做什么 |
|---|---|---|
queued |
已付款,排队等待交付 | 继续轮询 |
processing |
正在交付,已到的账号已在 items[] 里 |
可以先用已到的,继续轮询 |
completed |
全部交付 | 结束轮询 |
partial |
少交付了一部分,差额已自动退回(refundVnd) |
已交付的账号照常使用 |
failed |
一个也没交付,全额退回 | 稍后再试 |
API 下的订单会出现在网页“购买短效 Gmail”的“历史记录”标签页里,网页下的订单也能用 API 查,两边是同一批订单。
读取收件箱:用接口,或者给一个链接
inbox 为 true 的账号,系统可以替你读收件箱:
resp = requests.get(f"{API}/orders/{order['id']}/items/1/inbox",
params={"max": 10}, headers=H, timeout=70)
data = resp.json()
if data["success"]:
for m in data["data"]["letters"]:
print(m["receivedAt"], m["from"], m["subject"], m["code"])
elif (data["error"].get("details") or {}).get("dead"):
print("账号已被锁定或删除,不必再读")
max 可以是 10、20、50、100 或 200,读得越多越慢。每封邮件的 code 是系统提取出的验证码或链接,提取不到时为 null,完整内容在 content 里。
不想让别人碰你的 API 密钥,又要让同事或客户自己看邮件,就把 inboxUrl 发给对方:打开链接就能读这个账号的邮件,不需要 API 密钥。链接发错了人,调用 POST .../items/{lineNo}/inbox-link,action 传 regenerate 生成新链接(旧链接立即失效),或传 off 关闭。想知道账号还能不能用,调用 GET .../items/{lineNo}/status,live 返回 true、false,判断不了时为 null。读取收件箱和检测状态都有每小时次数上限,网页和 API 共用,具体以 API 文档为准。
错误码与重试
| 错误码 | HTTP | 含义 | 怎么处理 |
|---|---|---|---|
MAILSHOP_OUT_OF_STOCK |
409 | 这个数量在当前价格下库存不够 | error.details.stock 是现在能买的数量,按它调低数量 |
MAILSHOP_QTY_LIMIT |
400 | 超过单笔订单上限 | 上限在 error.details.max,拆成几单 |
| 其他 5xx 错误 | 5xx | 这笔购买当场没能完成;没完成的订单会全额退回余额 | 先用订单列表确认,再用新的 Idempotency-Key 重试 |
MAILSHOP_DISABLED |
503 | 购买功能暂停,或这个类型已关闭 | 稍后再试 |
INSUFFICIENT_BALANCE |
402 | 余额不足 | 充值后再买 |
RATE_LIMITED |
429 | 下单太频繁;每分钟的购买次数有上限,网页和 API 共用 | 按 Retry-After 等待后重试 |
DUPLICATE_REQUEST |
409 | 同一个 key 用在了不同的内容上,或第一个请求还在处理 | 稍等再查;要买新的一单就换新 key |
质保与合理使用
已交付的账号是买断的,不能退;唯一的保障写在每个类型的 terms 里:购买后 2 小时内,如果首次登录一直失败,带上订单号通过 Telegram 联系客服,视库存更换账号或退款到余额;首次登录成功后质保结束,规则见首次登录质保。API 不会自动换号,换号只能走客服。
这类账号寿命很短,几十分钟到数小时,因类型而异,所以要用的时候再买,买到就登录。谷歌登录时可能要求人机验证,OTPGmail 不代为通过;你的工具处理不了这一步,就不要买。两种类型的交付内容和登录方式,见购买短效 Gmail 账号;用它测试“使用 Google 登录”的完整思路,见测试用的谷歌账号从哪来。
请把账号用于你自己的测试和项目,不要用来在其他平台上大量开设账号。使用前请确认符合谷歌和目标平台的服务条款以及你所在地的法律法规;OTPGmail 不提供绕过平台或地区限制的方法。
常见问题
用 API 买和在网页上买,价格一样吗?
一样。价格以报价接口和商品列表返回的为准,就是实际扣费的金额;调用 API 本身不收费。
账号登录不了,API 能自动换一个吗?
不能。首次登录质保只能通过客服处理:带上订单号联系 Telegram 客服,视库存更换或退款到余额。
一次能买多少个?
每个类型当前能买的最大数量在商品列表的 maxQty 字段里,它取库存和单笔上限中较小的一个。数量多的订单会陆续交付,processing 时就能先用已到的账号。
买到的 Gmail 能收别的网站的验证码吗?
能。支持读取收件箱的账号,用上面的 inbox 接口就能读到,code 字段里是提取出的验证码或链接;其他账号登录后在 Gmail 里查看。
