mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-05-07 05:02:50 +08:00
f5ca8afccea9a5031df5bb58a331049fc6879ef2
* test: add E2E tests for auto-reply trigger and webhook trigger - Improve mock reply() in e2e_test_api.ts to send auto-replies via SMTP (WorkerMailer) so they reach Mailpit for verification - Add auto-reply-trigger.spec.ts: verifies auto-reply is sent when incoming mail matches source_prefix, and NOT sent otherwise - Add webhook-trigger.spec.ts: starts a temporary HTTP server to receive webhook calls, verifies payload on mail arrival Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: fallback EmailMessage for E2E auto-reply when cloudflare:email is unavailable In wrangler dev mode without Email Routing binding, `import('cloudflare:email')` throws, silently caught by auto_reply's try-catch. Add a fallback that constructs a plain object with a ReadableStream `raw` property so the E2E mock reply() can send the auto-reply via SMTP to Mailpit. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: handle both \r\n and \n line endings in MIME parser for E2E tests mimetext uses os.EOL which is \n on Linux (Docker). The parseMimeForReply function only looked for \r\n, causing it to fail parsing the auto-reply MIME content in the E2E environment. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: add debug logging and robust raw MIME extraction for E2E auto-reply - auto_reply.ts: add fallback ReadableStream when cloudflare:email is unavailable, attach rawMime directly to replyMessage - e2e_test_api.ts: try reading rawMime string first, then fallback to ReadableStream; add diagnostic console.log for CI debugging Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: skip sealed EmailMessage in E2E mode, await webhook server listen - auto_reply.ts: use plain object with raw ReadableStream in E2E_TEST_MODE (cloudflare:email's EmailMessage is sealed, can't attach extra properties) - e2e_test_api.ts: simplify mock reply() to read raw ReadableStream directly, add defensive check for from without @ - webhook-trigger.spec.ts: await server.listen to ensure socket is bound before sending requests (CodeRabbit review feedback) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: add missing await for async startWebhookReceiver in disabled test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: drop auto-reply E2E test, clean up webhook test - Remove auto-reply-trigger.spec.ts (cannot test without modifying production auto_reply.ts due to sealed EmailMessage from cloudflare:email) - Clean up e2e_test_api.ts: remove WorkerMailer, MIME parsing, and SMTP reply logic that was only needed for auto-reply testing - Improve webhook test: use dynamic port allocation (port 0) instead of hardcoded WEBHOOK_PORT to avoid port conflicts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * test: assert webhook request path in E2E test Add path assertion to verify webhook request hits /webhook endpoint, preventing false positives from incorrect routing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…
…
…
…
…
…
…
…
…
Cloudflare Temp Email - Free Temporary Email Service
This project is for learning and personal use only. Please do not use it for any illegal activities, or you will be responsible for the consequences.
A fully-featured temporary email service!
- Completely Free - Built on Cloudflare's free services with zero cost
- High Performance - Rust WASM email parsing for extremely fast response
- Modern UI - Responsive design with multi-language support and easy operation
- Address Password - Support setting individual passwords for email addresses to enhance security (enabled via
ENABLE_ADDRESS_PASSWORD)
Deployment Documentation - Quick Start
Documentation | Github Action Deployment Guide
Changelog
See CHANGELOG for the latest updates.
Live Demo
Try it now → https://mail.awsl.uk/
Table of Contents (Click to expand/collapse)
Core Features
Core Features Details (Click to expand/collapse)
Email Processing
- Use
rust wasmto parse emails, with fast parsing speed. Almost all emails can be parsed. Even emails that Node.js parsing modules fail to parse can be successfully parsed by rust wasm - AI Email Recognition - Use Cloudflare Workers AI to automatically extract verification codes, authentication links, service links and other important information from emails
- Support sending emails with
DKIMverification - Support multiple sending methods such as
SMTPandResend - Add attachment viewing feature with support for displaying attachment images
- Support S3 attachment storage and deletion
- Spam detection and blacklist/whitelist configuration
- Email forwarding feature with global forwarding address support
User Management
- Use
credentialsto log in to previously used mailboxes - Add complete user registration and login functionality. Users can bind email addresses and automatically obtain email JWT credentials to switch between different mailboxes after binding
- Support
OAuth2third-party login (Github, Authentik, etc.) - Support
Passkeypasswordless login - User role management with support for multi-role domain and prefix configuration
- User inbox viewing with address and keyword filtering support
Admin Features
- Complete admin console
- Create mailboxes without prefix in
adminbackend - Admin user management page with user address viewing feature
- Scheduled cleanup function with support for multiple cleanup strategies
- Get mailboxes with custom names,
admincan configure blacklist - Add access password for use as a private site
Multi-language & Interface
- Both frontend and backend support multi-language
- Modern UI design with responsive layout
- Google Ads integration support
- Use shadow DOM to prevent style pollution
- Support URL JWT parameter auto-login
Integration & Extensions
- Complete
Telegram Botsupport,Telegrampush notifications, and Telegram Bot mini app - Add
SMTP proxy serversupportingSMTPfor sending emails andIMAPfor viewing emails - Webhook support and message push integration
- Support
CF TurnstileCAPTCHA verification - Rate limiting configuration to prevent abuse
Technical Architecture
Technical Architecture Details (Click to expand/collapse)
System Architecture
- Database: Cloudflare D1 as the main database
- Frontend Deployment: Deploy frontend using Cloudflare Pages
- Backend Deployment: Deploy backend using Cloudflare Workers
- Email Routing: Use Cloudflare Email Routing
Tech Stack
- Frontend: Vue 3 + Vite + TypeScript
- Backend: TypeScript + Cloudflare Workers
- Email Parsing: Rust WASM (mail-parser-wasm)
- Database: Cloudflare D1 (SQLite)
- Storage: Cloudflare KV + R2 (optional S3)
- Proxy Service: Python SMTP/IMAP Proxy Server
Main Components
- Worker: Core backend service
- Frontend: Vue 3 user interface
- Mail Parser WASM: Rust email parsing module
- SMTP Proxy Server: Python email proxy service
- Pages Functions: Cloudflare Pages middleware
- Documentation: VitePress documentation site
Important Notes
- When adding domain records in Resend, if your DNS provider is hosting your 3rd level domain a.b.com, please remove the 2nd level domain prefix b from the default name generated by Resend, otherwise it will add a.b.b.com, causing verification to fail. After adding the record, you can verify it using:
nslookup -qt="mx" a.b.com 1.1.1.1
Join the Community
Languages
TypeScript
45.7%
Vue
44.8%
Python
4.7%
JavaScript
3.9%
Rust
0.6%
Other
0.3%