Mailtr
← Blog

Tự động lấy OTP bằng Python với Mailtr API

Bài này hướng dẫn dùng Python (thư viện requests) để tạo một hộp thư tạm qua Mailtr API, chờ email đến, và lấy mã OTP đã được trích sẵn. Code có thể chạy ngay sau khi bạn thay API key.

Bước 1: Cài đặt và đặt API key

Cài requests và lấy API key trong Tài khoản → API:

pip install requests
export MAILTR_KEY="mk_xxxxxxxxxxxxxxxx"

Bước 2: Script lấy OTP hoàn chỉnh

Script tạo inbox, dùng địa chỉ đó để đăng ký dịch vụ cần test, rồi poll cho tới khi nhận được OTP:

import os, time, requests

BASE = "https://mailtr.vn"
KEY  = os.environ["MAILTR_KEY"]
H    = {"X-API-Key": KEY}

def create_inbox():
    r = requests.post(f"{BASE}/api/v1/inbox", headers=H, json={})
    r.raise_for_status()
    data = r.json()
    return data["id"], data["address"]

def wait_for_otp(inbox_id, timeout=60):
    deadline = time.time() + timeout
    seen = set()
    while time.time() < deadline:
        r = requests.get(f"{BASE}/api/v1/inbox/{inbox_id}/messages", headers=H)
        for m in r.json().get("messages", []):
            if m["id"] in seen:
                continue
            seen.add(m["id"])
            full = requests.get(f"{BASE}/api/v1/messages/{m['id']}", headers=H).json()
            otp = full["message"].get("otp")
            if otp:
                return otp
        time.sleep(3)
    raise TimeoutError("Không nhận được OTP trong thời gian chờ")

if __name__ == "__main__":
    inbox_id, address = create_inbox()
    print("Inbox:", address)
    # -> dùng 'address' để đăng ký dịch vụ cần test ở đây <-
    otp = wait_for_otp(inbox_id)
    print("OTP:", otp)

Mẹo

Đặt timeout đủ lớn nếu nhà cung cấp gửi mail chậm. Với khối lượng lớn, nâng gói để có quota và tốc độ cao hơn. Nếu cần realtime, dùng webhook thay vì poll (xem bài về n8n).