Files

2.2 KiB
Raw Permalink Blame History

mail.tm Disposable Email API

Бесплатный disposable email API. Не требует регистрации, токен через JWT.

API Base

https://api.mail.tm

Create Account

import urllib.request, json, time

# Генерация уникального адреса
addr = f"user{int(time.time()) % 100000000}@emalupe.com"
req = urllib.request.Request(
    'https://api.mail.tm/accounts',
    data=json.dumps({'address': addr, 'password': 'StrongPass123!'}).encode(),
    headers={'Content-Type': 'application/json'}
)
resp = urllib.request.urlopen(req)
data = json.loads(resp.read())
# → {"id": "...", "address": "user12345678@emalupe.com", ...}

Get Token (JWT)

req = urllib.request.Request(
    'https://api.mail.tm/token',
    data=json.dumps({'address': addr, 'password': 'StrongPass123!'}).encode(),
    headers={'Content-Type': 'application/json'}
)
resp = urllib.request.urlopen(req)
data = json.loads(resp.read())
token = data['token']  # JWT for Bearer auth

Check Inbox

req = urllib.request.Request(
    'https://api.mail.tm/messages',
    headers={'Authorization': f'Bearer {token}'}
)
resp = urllib.request.urlopen(req)
data = json.loads(resp.read())
# → {"hydra:member": [{"id": "...", "subject": "...", ...}]}

Read Message

req = urllib.request.Request(
    f'https://api.mail.tm/messages/{msg_id}',
    headers={'Authorization': f'Bearer {token}'}
)
resp = urllib.request.urlopen(req)
data = json.loads(resp.read())
# → {"html": ["<html>..."], "text": "..."}

Pitfalls

  • Домен @emalupe.com: не блокируется большинством сервисов (в отличие от @mail.tm, @guerrillamail.com)
  • Токен короткоживущий: получай свежий токен перед каждым использованием
  • Rate limit: ~3-5 запросов подряд, потом пауза
  • Не все сервисы принимают: ClickUp, Stagewise, некоторые AI-платформы блокируют disposable домены
  • Для массовой регистрации: лучше Gmail+aliases, catch-all домены, или temp.coda.ink