用 Python 接收邮件
在 Python 里读邮件,经典做法是用 IMAP(imaplib)连一个真实邮箱。但对自动化和测试而言这太重了;一个走 HTTP 的一次性收件箱 API 要简单得多。本文是开发者邮件测试的一部分;另见 Node.js 版本。
创建并轮询(requests)
import os, time, requests
API = "https://moemail.app/api"
H = {"X-API-Key": os.environ["MAIL_KEY"]}
def create_inbox():
return requests.post(API + "/emails/generate", headers=H).json()
def wait_for_email(inbox_id, timeout=30):
end = time.time() + timeout
while time.time() < end:
msgs = requests.get(API + "/emails/" + inbox_id + "/messages", headers=H).json()["messages"]
if msgs:
return msgs[0]
time.sleep(1.5)
raise TimeoutError("no email arrived")
在 pytest 或脚本里这样用:开一个收件箱,触发邮件,然后 wait_for_email 并读取 msg["text"]。
或者接收 Webhook(Flask)
from flask import Flask, request
app = Flask(__name__)
@app.post("/inbound")
def inbound():
mail = request.get_json() # verify the signature first in production
print("got mail for", mail["to"], "-", mail["subject"])
return "", 200 # respond fast; non-2xx triggers retries
它和 Selenium 邮件测试天然合拍,在 CI 里也照样跑。
动手开始
读一读 OpenAPI 文档,再创建一个邮箱,就能开始接收了。