[ IMAP & POP3 ]·Growth · Enterprise

Read disposable inboxes
with any IMAP client.

Standard IMAP4rev1 and POP3 over TLS. If your script, bot, test framework, or mail client speaks IMAP — it works with FCE inboxes right now. No custom SDK. No webhooks to wire up. Just host, port, and your API key.

Quick connect

IMAP hostimap.freecustom.email
IMAP port993 (TLS)
POP3 hostpop.freecustom.email
POP3 port995 (TLS)
Usernameyour-inbox@addmy.space
Passwordfce_your_api_key

Works with every tool that speaks IMAP

Python imaplibNode.js imap-simpleGo mailThunderbirdApple MailOutlookMutt / NeoMuttEvolutionPlaywrightSeleniumPuppeteerCypressRuby Net::IMAPJava JavaMailPHP IMAP extRust async-imapPython imaplibNode.js imap-simpleGo mailThunderbirdApple MailOutlookMutt / NeoMuttEvolutionPlaywrightSeleniumPuppeteerCypressRuby Net::IMAPJava JavaMailPHP IMAP extRust async-imap
LangChain agentsAutoGPTCrewAIn8nMake.comZapierGitHub ActionsGitLab CIJenkinsAirflowK6 load testsPostmancurl + openssltelnetSwift MailCoreKotlin JavaMailC# MailKitLangChain agentsAutoGPTCrewAIn8nMake.comZapierGitHub ActionsGitLab CIJenkinsAirflowK6 load testsPostmancurl + openssltelnetSwift MailCoreKotlin JavaMailC# MailKit
Why IMAP

The protocol every tool already supports.

Any IMAP client, zero setup

If it speaks RFC 3501 it works. Apple Mail, Thunderbird, Outlook, Mutt — configure host, port, and your API key as the password. Done.

Built for bots & automation

Every major test framework supports IMAP. Playwright, Selenium, Cypress, Puppeteer — read verification emails without a custom webhook or polling loop.

Every language, native library

Python imaplib, Node.js imap-simple, Go mail, Ruby Net::IMAP, Java JavaMail, C# MailKit, Rust async-imap — no custom SDK needed.

Same inbox, three interfaces

REST API, WebSocket, and now IMAP/POP3 — all hitting the same mailbox. Mix interfaces freely within your stack.

TLS-only, API key auth

Ports 993 (IMAPS) and 995 (POP3S) only. Your fce_ API key is the password — no extra credentials, immediate revocation.

Growth & Enterprise

Up to 5 concurrent IMAP sessions on Growth, 20 on Enterprise. POP3 included. Each message fetch costs 5 requests from your monthly quota.

Use cases

Real workflows, real code.

01

CI/CD pipelines

GitHub Actions, GitLab CI, Jenkins — register an inbox, trigger signup, IMAP FETCH the OTP, assert and tear down.

yaml
# GitHub Actions — read OTP via IMAP
- name: Get OTP
  run: |
    python - <<'EOF'
    import imaplib, email, time, re

    m = imaplib.IMAP4_SSL("imap.freecustom.email", 993)
    m.login("ci@addmy.space", "$" + "{{ secrets.FCE_API_KEY }}")
    m.select("INBOX")
    time.sleep(3)  # wait for delivery
    _, ids = m.search(None, "UNSEEN")
    _, data = m.fetch(ids[0].split()[-1], "(RFC822)")
    body = email.message_from_bytes(data[0][1]).get_payload()
    otp = re.search(r"\b(\d{6})\b", body).group(1)
    print(f"OTP={otp}")
    m.logout()
    EOF

02

Playwright E2E tests

Full browser automation — sign up, trigger email, read OTP over IMAP, complete flow. No polling API, no webhook.

typescript
// playwright.test.ts — IMAP-based OTP retrieval
import { test, expect } from "@playwright/test";
import imaps from "imap-simple";

test("sign-up flow", async ({ page }) => {
  const inbox = "test-" + Date.now() + "@addmy.space";
  // Register inbox via FCE API first
  await page.goto("https://example.com/signup");
  await page.fill("[name=email]", inbox);
  await page.click("[type=submit]");

  // Read OTP via IMAP
  const conn = await imaps.connect({
    imap: { user: inbox, password: process.env.FCE_API_KEY!,
            host: "imap.freecustom.email", port: 993, tls: true },
  });
  await conn.openBox("INBOX");
  await page.waitForTimeout(3000);
  const msgs = await conn.search(["UNSEEN"], { bodies: ["TEXT"] });
  const body  = msgs[0].parts[0].body as string;
  const otp   = body.match(/\b(\d{6})\b/)![1];
  conn.end();

  await page.fill("[name=otp]", otp);
  await page.click("[type=submit]");
  await expect(page).toHaveURL("/dashboard");
});

03

Python bot (multi-account)

Generate 100 inboxes, trigger 100 signups in parallel, read all OTPs via IMAP concurrently.

python
import imaplib, email, re
from concurrent.futures import ThreadPoolExecutor
import requests

FCE_KEY  = "fce_your_api_key"
API_BASE = "https://api2.freecustom.email/v1"

def get_otp(inbox: str) -> str:
    """Fetch the latest 6-digit OTP from an IMAP inbox."""
    with imaplib.IMAP4_SSL("imap.freecustom.email", 993) as m:
        m.login(inbox, FCE_KEY)
        m.select("INBOX")
        _, ids = m.search(None, "UNSEEN")
        for num in reversed(ids[0].split()):
            _, data = m.fetch(num, "(RFC822)")
            body = email.message_from_bytes(data[0][1]).get_payload(decode=True)
            if body:
                match = re.search(rb"\b(\d{6})\b", body)
                if match:
                    return match.group(1).decode()
    return ""

# Generate 100 inboxes
r = requests.post(f"{API_BASE}/inboxes/generate",
    headers={"Authorization": f"Bearer {FCE_KEY}"},
    json={"count": 100, "parseCode": True})
inboxes = [i["email"] for i in r.json()["inboxes"]]

# Parallel OTP fetch
with ThreadPoolExecutor(max_workers=20) as pool:
    otps = list(pool.map(get_otp, inboxes))
print(otps[:5])

IMAP & POP3 plan limits

FeatureGrowth $89/moEnterprise $199/mo
IMAP access
POP3 access
Concurrent IMAP sessions520
Concurrent POP3 sessions310
Cost per message fetched5 requests5 requests
Connect / list / searchFreeFree
TLS required993 / 995993 / 995
Inbox ownership requiredYesYes

Frequently asked

Do I need a special IMAP library?

No. Any RFC 3501 compliant client works — Python imaplib, Node.js imap-simple, Go mail, Java JavaMail, C# MailKit, Rust async-imap, and every desktop mail client. FCE implements standard IMAP4rev1.

What's the password for the IMAP login?

Your fce_ API key. Username is the full inbox address (alice@addmy.space), password is fce_your_api_key. Over TLS this is completely safe — equivalent to OAuth app-specific passwords.

Can I use POP3 instead of IMAP?

Yes. POP3S on port 995 using the same credentials. POP3 is simpler and supported by every mail library. Messages deleted via POP3 DELE are removed from the inbox.

Which inboxes can I access?

Only inboxes registered to your account (via POST /v1/inboxes or the Inbox Generator). The inbox must be in your apiInboxes list or under a verified custom domain.

How much does each message fetch cost?

5 requests from your monthly quota per FETCH (IMAP) or RETR (POP3). Connecting, SELECT, SEARCH, LIST, and UIDL are free. IMAP/POP3 is a premium persistent-connection protocol with higher server overhead than a single REST call.

Is IDLE (push) supported?

Not yet — IMAP IDLE is on the roadmap. For real-time push, use the WebSocket API (Growth+) or Wait API (Developer+). IMAP polling every few seconds is a good practical alternative for most scripts.

Can bots use this with tools like LangChain or CrewAI?

Yes. Any agent that can make TCP connections or use a mail library can read FCE inboxes via IMAP. The standard credential flow (username + API key) integrates with no custom tooling.