$ -weight: 500;">curl -fsSL freecustom.email/-weight: 500;">install.sh | sh
-weight: 500;">curl -fsSL freecustom.email/-weight: 500;">install.sh | sh
-weight: 500;">curl -fsSL freecustom.email/-weight: 500;">install.sh | sh
# macOS / Linux — Homebrew
-weight: 500;">brew tap DishIs/homebrew-tap
-weight: 500;">brew -weight: 500;">install fce # Windows — Scoop
scoop bucket add fce https://github.com/DishIs/scoop-bucket
scoop -weight: 500;">install fce # Windows — Chocolatey
choco -weight: 500;">install fce # All platforms — -weight: 500;">npm
-weight: 500;">npm -weight: 500;">install -g fcemail@latest # All platforms — Go
go -weight: 500;">install github.com/DishIs/fce-cli@latest
# macOS / Linux — Homebrew
-weight: 500;">brew tap DishIs/homebrew-tap
-weight: 500;">brew -weight: 500;">install fce # Windows — Scoop
scoop bucket add fce https://github.com/DishIs/scoop-bucket
scoop -weight: 500;">install fce # Windows — Chocolatey
choco -weight: 500;">install fce # All platforms — -weight: 500;">npm
-weight: 500;">npm -weight: 500;">install -g fcemail@latest # All platforms — Go
go -weight: 500;">install github.com/DishIs/fce-cli@latest
# macOS / Linux — Homebrew
-weight: 500;">brew tap DishIs/homebrew-tap
-weight: 500;">brew -weight: 500;">install fce # Windows — Scoop
scoop bucket add fce https://github.com/DishIs/scoop-bucket
scoop -weight: 500;">install fce # Windows — Chocolatey
choco -weight: 500;">install fce # All platforms — -weight: 500;">npm
-weight: 500;">npm -weight: 500;">install -g fcemail@latest # All platforms — Go
go -weight: 500;">install github.com/DishIs/fce-cli@latest
[1/3] Opening browser… [2/3] Waiting for authentication… [3/3] Saving credentials… ✓ Logged in successfully! · Run `fce -weight: 500;">status` to see your account details.
[1/3] Opening browser… [2/3] Waiting for authentication… [3/3] Saving credentials… ✓ Logged in successfully! · Run `fce -weight: 500;">status` to see your account details.
[1/3] Opening browser… [2/3] Waiting for authentication… [3/3] Saving credentials… ✓ Logged in successfully! · Run `fce -weight: 500;">status` to see your account details.
· Temporary inbox: dev-fy8x@ditcloud.info ✓ Watching for emails... ✓ Watching dev-fy8x@ditcloud.info GROWTH · Waiting for emails… (press Ctrl+C to -weight: 500;">stop) ──────────────────────────────────────────────────── ID JpW3DImT3 FROM "Dishant Singh" <[email protected]> SUBJ Your OTP for FCE: 212342 TIME 20:19:54
────────────────────────────────────────────────────
· Temporary inbox: dev-fy8x@ditcloud.info ✓ Watching for emails... ✓ Watching dev-fy8x@ditcloud.info GROWTH · Waiting for emails… (press Ctrl+C to -weight: 500;">stop) ──────────────────────────────────────────────────── ID JpW3DImT3 FROM "Dishant Singh" <[email protected]> SUBJ Your OTP for FCE: 212342 TIME 20:19:54
────────────────────────────────────────────────────
· Temporary inbox: dev-fy8x@ditcloud.info ✓ Watching for emails... ✓ Watching dev-fy8x@ditcloud.info GROWTH · Waiting for emails… (press Ctrl+C to -weight: 500;">stop) ──────────────────────────────────────────────────── ID JpW3DImT3 FROM "Dishant Singh" <[email protected]> SUBJ Your OTP for FCE: 212342 TIME 20:19:54
────────────────────────────────────────────────────
fce otp dev-fy8x@ditcloud.info
fce otp dev-fy8x@ditcloud.info
fce otp dev-fy8x@ditcloud.info
──────────────────────────────────────────────── OTP
──────────────────────────────────────────────── OTP · 212342 From · "Dishant Singh" <[email protected]> Subj · Your OTP for FCE: 212342 Time · 20:19:54
──────────────────────────────────────────────── OTP
──────────────────────────────────────────────── OTP · 212342 From · "Dishant Singh" <[email protected]> Subj · Your OTP for FCE: 212342 Time · 20:19:54
──────────────────────────────────────────────── OTP
──────────────────────────────────────────────── OTP · 212342 From · "Dishant Singh" <[email protected]> Subj · Your OTP for FCE: 212342 Time · 20:19:54
OTP=$(fce otp dev-fy8x@ditcloud.info | grep "OTP ·" | awk '{print $NF}')
echo "$OTP"
# 212342
OTP=$(fce otp dev-fy8x@ditcloud.info | grep "OTP ·" | awk '{print $NF}')
echo "$OTP"
# 212342
OTP=$(fce otp dev-fy8x@ditcloud.info | grep "OTP ·" | awk '{print $NF}')
echo "$OTP"
# 212342
# .github/workflows/email-test.yml
- name: E2E email verification env: FCE_API_KEY: ${{ secrets.FCE_API_KEY }} run: | -weight: 500;">curl -fsSL freecustom.email/-weight: 500;">install.sh | sh INBOX=$(fce inbox add random | tr -d '[:space:]') echo "Inbox: $INBOX" -weight: 500;">curl -s -X POST https://staging.myapp.com/api/signup \ -H "Content-Type: application/json" \ -d "{\"email\": \"$INBOX\"}" OTP=$(fce otp "$INBOX" | grep "OTP ·" | awk '{print $NF}') echo "OTP: $OTP" -weight: 500;">curl -s -f -X POST https://staging.myapp.com/api/verify \ -H "Content-Type: application/json" \ -d "{\"email\": \"$INBOX\", \"otp\": \"$OTP\"}"
# .github/workflows/email-test.yml
- name: E2E email verification env: FCE_API_KEY: ${{ secrets.FCE_API_KEY }} run: | -weight: 500;">curl -fsSL freecustom.email/-weight: 500;">install.sh | sh INBOX=$(fce inbox add random | tr -d '[:space:]') echo "Inbox: $INBOX" -weight: 500;">curl -s -X POST https://staging.myapp.com/api/signup \ -H "Content-Type: application/json" \ -d "{\"email\": \"$INBOX\"}" OTP=$(fce otp "$INBOX" | grep "OTP ·" | awk '{print $NF}') echo "OTP: $OTP" -weight: 500;">curl -s -f -X POST https://staging.myapp.com/api/verify \ -H "Content-Type: application/json" \ -d "{\"email\": \"$INBOX\", \"otp\": \"$OTP\"}"
# .github/workflows/email-test.yml
- name: E2E email verification env: FCE_API_KEY: ${{ secrets.FCE_API_KEY }} run: | -weight: 500;">curl -fsSL freecustom.email/-weight: 500;">install.sh | sh INBOX=$(fce inbox add random | tr -d '[:space:]') echo "Inbox: $INBOX" -weight: 500;">curl -s -X POST https://staging.myapp.com/api/signup \ -H "Content-Type: application/json" \ -d "{\"email\": \"$INBOX\"}" OTP=$(fce otp "$INBOX" | grep "OTP ·" | awk '{print $NF}') echo "OTP: $OTP" -weight: 500;">curl -s -f -X POST https://staging.myapp.com/api/verify \ -H "Content-Type: application/json" \ -d "{\"email\": \"$INBOX\", \"otp\": \"$OTP\"}"
-weight: 500;">npm -weight: 500;">install freecustom-email
-weight: 500;">npm -weight: 500;">install freecustom-email
-weight: 500;">npm -weight: 500;">install freecustom-email
import { FreecustomEmailClient } from 'freecustom-email'; const client = new FreecustomEmailClient({ apiKey: process.env.FCE_API_KEY });
await client.inboxes.register('[email protected]');
const otp = await client.otp.waitFor('[email protected]');
console.log(otp); // '212342'
import { FreecustomEmailClient } from 'freecustom-email'; const client = new FreecustomEmailClient({ apiKey: process.env.FCE_API_KEY });
await client.inboxes.register('[email protected]');
const otp = await client.otp.waitFor('[email protected]');
console.log(otp); // '212342'
import { FreecustomEmailClient } from 'freecustom-email'; const client = new FreecustomEmailClient({ apiKey: process.env.FCE_API_KEY });
await client.inboxes.register('[email protected]');
const otp = await client.otp.waitFor('[email protected]');
console.log(otp); // '212342'
-weight: 500;">pip -weight: 500;">install freecustom-email
-weight: 500;">pip -weight: 500;">install freecustom-email
-weight: 500;">pip -weight: 500;">install freecustom-email
from freecustom_email import FreeCustomEmail
import asyncio, os client = FreeCustomEmail(api_key=os.environ["FCE_API_KEY"]) async def main(): await client.inboxes.register("[email protected]") otp = await client.otp.wait_for("[email protected]") print(otp) # '212342' asyncio.run(main())
from freecustom_email import FreeCustomEmail
import asyncio, os client = FreeCustomEmail(api_key=os.environ["FCE_API_KEY"]) async def main(): await client.inboxes.register("[email protected]") otp = await client.otp.wait_for("[email protected]") print(otp) # '212342' asyncio.run(main())
from freecustom_email import FreeCustomEmail
import asyncio, os client = FreeCustomEmail(api_key=os.environ["FCE_API_KEY"]) async def main(): await client.inboxes.register("[email protected]") otp = await client.otp.wait_for("[email protected]") print(otp) # '212342' asyncio.run(main()) - Keep a shared test inbox that becomes a mess of race conditions when tests run in parallel
- Mock the email step and quietly -weight: 500;">stop testing the actual delivery pipeline
- Write fragile regex against a third-party API and break every time the email format changes
- Just... click through it manually in staging - 🖥️ CLI overview and docs: freecustom.email/api/cli
- 📦 GitHub repo: github.com/DishIs/fce-cli
- 🚀 Latest release: github.com/DishIs/fce-cli/releases/latest
- 🤖 Automation hub: freecustom.email/api/automation
- 📖 API docs: freecustom.email/api/docs
- 💬 Discord: discord.com/invite/Ztp7kT2QBz