SMTP catch-all + auth API. Per-mailbox dirs for multi-domain high concurrency. 10m TTL.
191
临时邮箱服务:SMTP 接收任意邮件并落盘,默认只保留 10 分钟,过期自动删除;HTTP API(Gin)鉴权后可按指定邮箱查询。
镜像:jjyy225/tmpemail
docker pull jjyy225/tmpemail:latest
docker run -d --name tmpemail \
--restart unless-stopped \
-p 25:25 \
-p 50001:50001 \
-e API_KEY=your-secret-key \
-v tmpemail-data:/data \
jjyy225/tmpemail:latest
| 端口 | 用途 |
|---|---|
25 | SMTP 收信(接受任意 RCPT TO) |
50001 | HTTP API(需 API_KEY) |
健康检查(无需鉴权):
curl http://127.0.0.1:50001/health
| 变量 | 默认 | 说明 |
|---|---|---|
API_KEY | changeme | API 密钥(务必修改) |
SMTP_ADDR | :25 | SMTP 监听 |
HTTP_ADDR | :50001 | HTTP 监听 |
DATA_DIR | /data | 邮件 JSON 目录 |
MAIL_TTL | 10m | 邮件保留时长 |
PURGE_INTERVAL | 15s | 过期清理周期 |
/api/* 需要密钥(/health 除外),任选其一:
X-API-Key: your-secret-key
Authorization: Bearer your-secret-key
?api_key=your-secret-key
统一接口:GET|POST /api/mails(别名 /api/query、/api/mail)
用 to / email / mailbox 指定收件邮箱(三者等价):
| 参数 | 说明 |
|---|---|
to / email / mailbox | 指定邮箱。完整地址(含 @)→ 精确匹配;不含 @ → 子串匹配 |
mode | latest = 该邮箱最后一封;all = 该邮箱 10 分钟内全部(默认 all) |
from | 发件人过滤 |
subject | 主题过滤 |
limit | all 时条数上限(默认 100,最大 500) |
raw | 1/true 返回完整原始邮件 |
id | 按邮件 UUID 精确取一封 |
# 推荐
curl -H "X-API-Key: your-secret-key" \
"http://127.0.0.1:50001/api/mails?mode=latest&[email protected]"
# 等价写法
curl -H "X-API-Key: your-secret-key" \
"http://127.0.0.1:50001/api/mails?mode=latest&[email protected]"
curl -H "X-API-Key: your-secret-key" \
"http://127.0.0.1:50001/api/mails?last=1&[email protected]"
POST:
curl -H "X-API-Key: your-secret-key" \
-H "Content-Type: application/json" \
-d '{"mode":"latest","email":"[email protected]"}' \
http://127.0.0.1:50001/api/mails
成功响应要点:
{
"ok": true,
"mode": "latest",
"email": "[email protected]",
"found": true,
"count": 1,
"mail": {
"id": "...",
"from": "[email protected]",
"to": ["[email protected]"],
"subject": "Your code",
"text": "code is 998877",
"received_at": "2026-07-24T08:06:45Z",
"expires_at": "2026-07-24T08:16:45Z",
"ttl_left_s": 599
},
"mails": [ { "...": "同上" } ]
}
无邮件时:found=false,mail=null,count=0(HTTP 仍为 200)。客户端读 mail 即可。
curl -H "X-API-Key: your-secret-key" \
"http://127.0.0.1:50001/api/mails?mode=all&[email protected]&limit=50"
curl -H "X-API-Key: your-secret-key" \
-H "Content-Type: application/json" \
-d '{"mode":"all","email":"[email protected]","limit":50}' \
http://127.0.0.1:50001/api/mails
响应:mails 数组,按收到时间倒序(最新在前)。
curl -H "X-API-Key: your-secret-key" \
"http://127.0.0.1:50001/api/mails/<uuid>?raw=1"
import time, requests
API = "http://127.0.0.1:50001/api/mails"
HDR = {"X-API-Key": "your-secret-key"}
EMAIL = "[email protected]"
for _ in range(60):
r = requests.get(API, headers=HDR, params={
"mode": "latest",
"email": EMAIL, # 指定邮箱
}, timeout=5)
data = r.json()
if data.get("found") and data.get("mail"):
print(data["mail"]["subject"])
print(data["mail"]["text"])
break
time.sleep(1)
cat > /tmp/mail.txt <<'EOF'
From: [email protected]
To: [email protected]
Subject: test-code
Content-Type: text/plain
code=123456
EOF
curl --url "smtp://127.0.0.1:25" \
--mail-from "[email protected]" \
--mail-rcpt "[email protected]" \
--upload-file /tmp/mail.txt
# 按该邮箱取最新一封
curl -H "X-API-Key: your-secret-key" \
"http://127.0.0.1:50001/api/mails?mode=latest&[email protected]"
/data/
boxes/<domain>/<local>/<recv_ns>__<uuid>.json
ids/<id前2位>/<uuid>.ref
@)为精确匹配,不会误匹配其它收件人。API_KEY,并限制 50001 访问来源。API.md。| Tag | 说明 |
|---|---|
latest | 最新稳定 |
20260724 | 按日期固定版本 |
Content type
Image
Digest
sha256:3fa261c3f…
Size
9 MB
Last updated
3 months ago
docker pull jjyy225/tmpemail