[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73840":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":16,"starSnapshotCount":16,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},73840,"moemail","beilunyang\u002Fmoemail","beilunyang","A cute temporary email service built with NextJS + Cloudflare technology stack 🎉 | 一个基于 NextJS + Cloudflare 技术栈构建的可爱临时邮箱服务🎉  ","https:\u002F\u002Fmoemail.app",null,"TypeScript",2641,2399,9,47,0,7,24,120,21,32,"MIT License",false,"master",[26,27,28,29],"cloudflare","cloudflare-workers","email","temp-email","2026-06-12 02:03:18","\n\u003Cp align=\"center\">\n  \u003Cimg src=\"public\u002Ficons\u002Ficon-192x192.png\" alt=\"MoeMail Logo\" width=\"100\" height=\"100\">\n  \u003Ch1 align=\"center\">MoeMail\u003C\u002Fh1>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  A cute temporary email service built with NextJS + Cloudflare technology stack 🎉\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cspan>English\u003C\u002Fspan> | \n  \u003Ca href=\".\u002FREADME.zh-CN.md\">简体中文\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.producthunt.com\u002Fproducts\u002Fmoemail?embed=true&amp;utm_source=badge-featured&amp;utm_medium=badge&amp;utm_campaign=badge-moemail\" target=\"_blank\" rel=\"noopener noreferrer\">\u003Cimg alt=\"MoeMail - OpenAPI‑first temp email, hosted &amp; ready | Product Hunt\" width=\"250\" height=\"54\" src=\"https:\u002F\u002Fapi.producthunt.com\u002Fwidgets\u002Fembed-image\u002Fv1\u002Ffeatured.svg?post_id=1078475&amp;theme=light&amp;t=1770964043604\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"#live-demo\">Live Demo\u003C\u002Fa> •\n  \u003Ca href=\"#documentation\">Documentation\u003C\u002Fa> •\n  \u003Ca href=\"#features\">Features\u003C\u002Fa> •\n  \u003Ca href=\"#tech-stack\">Tech Stack\u003C\u002Fa> •\n  \u003Ca href=\"#local-run\">Local Run\u003C\u002Fa> •\n  \u003Ca href=\"#deployment\">Deployment\u003C\u002Fa> •\n  \u003Ca href=\"#email-domain-configuration\">Email Domain Config\u003C\u002Fa> •\n  \u003Ca href=\"#permission-system\">Permission System\u003C\u002Fa> •\n  \u003Ca href=\"#system-settings\">System Settings\u003C\u002Fa> •\n  \u003Ca href=\"#sending-emails\">Sending Emails\u003C\u002Fa> •\n  \u003Ca href=\"#webhook-integration\">Webhook Integration\u003C\u002Fa> •\n  \u003Ca href=\"#openapi\">OpenAPI\u003C\u002Fa> •\n  \u003Ca href=\"#cli-tool\">CLI Tool\u003C\u002Fa> •\n  \u003Ca href=\"#environment-variables\">Environment Variables\u003C\u002Fa> •\n  \u003Ca href=\"#github-oauth-app-configuration\">Github OAuth Config\u003C\u002Fa> •\n  \u003Ca href=\"#google-oauth-app-configuration\">Google OAuth Config\u003C\u002Fa> •\n  \u003Ca href=\"#contribution\">Contribution\u003C\u002Fa> •\n  \u003Ca href=\"#license\">License\u003C\u002Fa> •\n  \u003Ca href=\"#community\">Community\u003C\u002Fa> •\n  \u003Ca href=\"#support\">Support\u003C\u002Fa>\n\u003C\u002Fp>\n\n## Live Demo\n[https:\u002F\u002Fmoemail.app](https:\u002F\u002Fmoemail.app)\n\n![Home](https:\u002F\u002Fpic.otaku.ren\u002F20241209\u002FAQADwsUxG9k1uVZ-.jpg \"Home\")\n\n![Mailbox](https:\u002F\u002Fpic.otaku.ren\u002F20241209\u002FAQADw8UxG9k1uVZ-.jpg \"Mailbox\")\n\n![Profile](https:\u002F\u002Fpic.otaku.ren\u002F20241227\u002FAQADVsIxG7OzcFd-.jpg \"Profile\")\n\n## Documentation\n**Full Documentation**: [https:\u002F\u002Fdocs.moemail.app](https:\u002F\u002Fdocs.moemail.app)\n\nThe documentation site contains detailed usage guides, API documentation, deployment tutorials, and other complete information.\n\n## Features\n\n- 🔒 **Privacy Protection**: Protect your real email address from spam and unnecessary subscriptions\n- ⚡ **Real-time Receipt**: Automatic polling, receive email notifications instantly\n- ⏱️ **Flexible Validity**: Supports 1 hour, 24 hours, 3 days, or permanent validity\n- 🎨 **Theme Switching**: Supports light and dark modes\n- 📱 **Responsive Design**: Perfectly adapted for desktop and mobile devices\n- 🔄 **Auto Cleanup**: Automatically cleans up expired mailboxes and emails\n- 📱 **PWA Support**: Support PWA installation\n- 💸 **Free Self-hosting**: Built on Cloudflare, capable of free self-hosting without any cost\n- 🎉 **Cute UI**: Simple and cute UI interface\n- 📤 **Sending Function**: Support sending emails using temporary addresses, based on Resend service\n- 🔔 **Webhook Notification**: Support receiving new email notifications via webhook\n- 🛡️ **Permission System**: Role-based access control system\n- 🔑 **OpenAPI**: Support accessing OpenAPI via API Key\n- 🤖 **Agent-first CLI**: CLI tool designed for AI agents to automate email workflows\n- 🌍 **Multi-language Support**: Supports Chinese and English interfaces, freely switchable\n\n## Tech Stack\n\n- **Framework**: [Next.js](https:\u002F\u002Fnextjs.org\u002F) (App Router)\n- **Platform**: [Cloudflare Pages](https:\u002F\u002Fpages.cloudflare.com\u002F)\n- **Database**: [Cloudflare D1](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fd1\u002F) (SQLite)\n- **Authentication**: [NextAuth](https:\u002F\u002Fauthjs.dev\u002Fgetting-started\u002Finstallation?framework=Next.js) with GitHub\u002FGoogle Login\n- **Styling**: [Tailwind CSS](https:\u002F\u002Ftailwindcss.com\u002F)\n- **UI Components**: Custom components based on [Radix UI](https:\u002F\u002Fwww.radix-ui.com\u002F)\n- **Email Handling**: [Cloudflare Email Workers](https:\u002F\u002Fdevelopers.cloudflare.com\u002Femail-routing\u002F)\n- **Type Safety**: [TypeScript](https:\u002F\u002Fwww.typescriptlang.org\u002F)\n- **ORM**: [Drizzle ORM](https:\u002F\u002Form.drizzle.team\u002F)\n- **Internationalization**: [next-intl](https:\u002F\u002Fnext-intl-docs.vercel.app\u002F)\n\n## Local Run\n\n### Prerequisites\n\n- Node.js 18+\n- Pnpm\n- Wrangler CLI\n- Cloudflare Account\n\n### Installation\n\n1. Clone the repository:\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fbeilunyang\u002Fmoemail.git\ncd moemail\n```\n\n2. Install dependencies:\n```bash\npnpm install\n```\n\n3. Setup Wrangler:\n```bash\ncp wrangler.example.json wrangler.json\ncp wrangler.email.example.json wrangler.email.json\ncp wrangler.cleanup.example.json wrangler.cleanup.json\n```\nSet Cloudflare D1 database name and database ID.\n\n4. Setup Environment Variables:\n```bash\ncp .env.example .env.local\n```\nSet `AUTH_GITHUB_ID`, `AUTH_GITHUB_SECRET`, `AUTH_SECRET`.\n\n5. Create local database schema:\n```bash\npnpm db:migrate-local\n```\n\n### Development\n\n1. Start development server:\n```bash\npnpm dev\n```\n\n2. Test Email Worker:\nCurrently cannot run and test locally, please use Wrangler to deploy the email worker and test.\n```bash\npnpm deploy:email\n```\n\n3. Test Cleanup Worker:\n```bash\npnpm dev:cleanup\npnpm test:cleanup\n```\n\n4. Generate Mock Data (Mailboxes and Messages):\n```bash\npnpm generate-test-data\n```\n\n## Deployment\n\n### Video Tutorial\nhttps:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Vcw3nqsq2-E\n\n### Local Wrangler Deployment\n1. Create .env file\n```bash\ncp .env.example .env\n```\n2. Set [Environment Variables](#environment-variables) in the .env file.\n\n3. Run deployment script\n```bash\npnpm dlx tsx .\u002Fscripts\u002Fdeploy\u002Findex.ts\n```\n\n### Github Actions Deployment\n\nThis project supports automated deployment using GitHub Actions. It supports the following triggers:\n\n1. **Auto Trigger**: Automatically triggers deployment flow when a new tag is pushed.\n2. **Manual Trigger**: Manually trigger in the GitHub Actions page.\n\n#### Deployment Steps\n\n1. Add the following Secrets in GitHub repository settings:\n   - `CLOUDFLARE_API_TOKEN`: Cloudflare API Token\n   - `CLOUDFLARE_ACCOUNT_ID`: Cloudflare Account ID\n   - `AUTH_GITHUB_ID`: GitHub OAuth App ID\n   - `AUTH_GITHUB_SECRET`: GitHub OAuth App Secret\n   - `AUTH_SECRET`: NextAuth Secret, used to encrypt session, please set a random string\n   - `CUSTOM_DOMAIN`: Custom domain for the website (Optional, if empty, uses Cloudflare Pages default domain)\n   - `PROJECT_NAME`: Pages project name (Optional, if empty, defaults to moemail)\n   - `DATABASE_NAME`: D1 database name (Optional, if empty, defaults to moemail-db)\n   - `KV_NAMESPACE_NAME`: Cloudflare KV namespace name, used for site settings (Optional, if empty, defaults to moemail-kv)\n\n2. Choose trigger method:\n\n   **Method 1: Push Tag Trigger**\n   ```bash\n   # Create a new tag\n   git tag v1.0.0\n   \n   # Push tag to remote repository\n   git push origin v1.0.0\n   ```\n\n   **Method 2: Manual Trigger**\n   - Go to the Actions page of the repository\n   - Select \"Deploy\" workflow\n   - Click \"Run workflow\"\n\n3. Deployment progress can be viewed in the Actions tab of the repository.\n\n#### Notes\n- Ensure all Secrets are set correctly.\n- When using tag trigger, the tag must start with `v` (e.g., v1.0.0).\n\n[![Deploy to Cloudflare Workers](https:\u002F\u002Fdeploy.workers.cloudflare.com\u002Fbutton)](https:\u002F\u002Fdeploy.workers.cloudflare.com\u002F?url=https:\u002F\u002Fgithub.com\u002Fbeilunyang\u002Fmoemail)\n\n\n## Email Domain Configuration\n\nIn the MoeMail User Profile page, you can configure the site's email domains. Supports multiple domain configurations, separated by commas.\n![Email Domain Configuration](https:\u002F\u002Fpic.otaku.ren\u002F20241227\u002FAQAD88AxG67zeVd-.jpg \"Email Domain Configuration\")\n\n### Cloudflare Email Routing Configuration\n\nTo make email domains effective, you also need to configure email routing in the Cloudflare console to forward received emails to the Email Worker.\n\n1. Login to [Cloudflare Console](https:\u002F\u002Fdash.cloudflare.com\u002F)\n2. Select your domain\n3. Click \"Email\" -> \"Email Routing\" in the left menu\n4. If it shows \"Email Routing is currently disabled\", please click \"Enable Email Routing\"\n![Enable Email Routing](https:\u002F\u002Fpic.otaku.ren\u002F20241223\u002FAQADNcQxG_K0SVd-.jpg \"Enable Email Routing\")\n5. After clicking, it will prompt you to add Email Routing DNS records, click \"Add records and enable\"\n![Add DNS Records](https:\u002F\u002Fpic.otaku.ren\u002F20241223\u002FAQADN8QxG_K0SVd-.jpg \"Add DNS Records\")\n6. Configure Routing Rules:\n   - Catch-all address: Enable \"Catch-all\"\n   - Edit Catch-all address\n    - Action: Select \"Send to Worker\"\n    - Destination: Select the \"email-receiver-worker\" you just deployed\n    - Save\n  ![Configure Routing Rules](https:\u002F\u002Fpic.otaku.ren\u002F20241223\u002FAQADNsQxG_K0SVd-.jpg \"Configure Routing Rules\")\n\n### Notes\n- Ensure domain DNS is hosted on Cloudflare.\n- Email Worker must be successfully deployed.\n- If Catch-All status is unavailable (stuck loading), please click `Destination addresses` next to `Routing rules`, and bind an email address there.\n\n## Permission System\n\nThe project uses a Role-Based Access Control (RBAC) system.\n\n### Role Configuration\n\nNew user default roles are configured by the Emperor in the site settings in the User Profile:\n- Duke: New users get temporary email, Webhook config permissions, and API Key management permissions.\n- Knight: New users get temporary email and Webhook config permissions.\n- Civilian: New users have no permissions, need to wait for Emperor to promote to Knight or Duke.\n\n### Role Levels\n\nThe system includes four role levels:\n\n1. **Emperor**\n   - Website Owner\n   - Has all permissions\n   - Only one Emperor per site\n\n2. **Duke**\n   - Super User\n   - Can use temporary email features\n   - Can configure Webhook\n   - Can create API Key to call OpenAPI\n   - Can be demoted to Knight or Civilian by Emperor\n\n3. **Knight**\n   - Advanced User\n   - Can use temporary email features\n   - Can configure Webhook\n   - Can be demoted to Civilian or promoted to Duke by Emperor\n\n4. **Civilian**\n   - Regular User\n   - No permissions\n   - Can be promoted to Knight or Duke by Emperor\n\n### Role Upgrade\n\n1. **Become Emperor**\n   - The first user to visit `\u002Fapi\u002Froles\u002Finit-emperor` interface will become the Emperor (Website Owner).\n   - Once an Emperor exists, no other user can be promoted to Emperor.\n\n2. **Role Changes**\n   - The Emperor can set other users as Duke, Knight, or Civilian in the User Profile page.\n\n### Permission Details\n\n- **Email Management**: Create and manage temporary emails\n- **Webhook Management**: Configure Webhooks for email notifications\n- **API Key Management**: Create and manage API access keys\n- **User Management**: Promote\u002FDemote user roles\n- **System Settings**: Manage global system settings\n\n## System Settings\n\nSystem settings are stored in Cloudflare KV, including:\n\n- `DEFAULT_ROLE`: Default role for new users, values: `CIVILIAN`, `KNIGHT`, `DUKE`\n- `EMAIL_DOMAINS`: Supported email domains, comma-separated\n- `ADMIN_CONTACT`: Administrator contact info\n- `MAX_EMAILS`: Maximum number of emails per user\n\n**Emperor** role can configure these in the User Profile page.\n\n## Sending Emails\n\nMoeMail supports sending emails using temporary addresses, based on [Resend](https:\u002F\u002Fresend.com\u002F) service.\n\n### Features\n\n- 📨 **Send from Temp Email**: Use created temporary emails as sender\n- 🎯 **Role Limits**: Different roles have different daily sending limits\n- 💌 **HTML Support**: Supports rich text email format\n\n### Role Sending Limits\n\n| Role | Daily Limit | Description |\n|------|-------------|-------------|\n| Emperor | Unlimited | Admin has no limits |\n| Duke | 5\u002Fday | Default 5 emails per day |\n| Knight | 2\u002Fday | Default 2 emails per day |\n| Civilian | Forbidden | No sending permission |\n\n> 💡 **Tip**: The Emperor can customize the daily limits for Dukes and Knights in the Mail Service Configuration.\n\n### Configure Sending Service\n\n1. **Get Resend API Key**\n   - Register at [Resend](https:\u002F\u002Fresend.com\u002F)\n   - Create API Key in console\n   - Copy API Key for later use\n\n2. **Configure Service**\n   - Login as Emperor\n   - Go to User Profile\n   - In \"Resend Service Configuration\":\n     - Enable Sending Service switch\n     - Enter Resend API Key\n     - Set daily limits for Duke and Knight (Optional)\n   - Save configuration\n\n3. **Verify Configuration**\n   - After saving, authorized users will see a \"Send Email\" button in the email list\n   - Click to open dialog and test\n\n### How to Send\n\n1. **Create Temp Email**\n   - Create a new temporary email in Mailbox page\n\n2. **Send Email**\n   - Find the email in the list\n   - Click \"Send Email\" button next to it\n   - Fill in:\n     - Recipient address\n     - Subject\n     - Content (supports HTML)\n   - Click \"Send\"\n\n3. **View History**\n   - Sent emails are saved in the message list of the corresponding mailbox\n   - View all sent\u002Freceived emails in mailbox detail page\n\n### Notes\n\n- 📋 **Resend Limits**: Please note Resend's sending limits and pricing\n- 🔐 **Domain Verification**: Using custom domains requires verification in Resend\n- 🚫 **Anti-Spam**: Please follow email sending standards, avoid spamming\n- 📊 **Quota Monitoring**: System counts daily usage, stops sending when limit reached\n- 🔄 **Quota Reset**: Daily quota resets at 00:00\n\n## Webhook Integration\n\nWhen a new email is received, the system sends a POST request to the configured and enabled Webhook URL.\n\n### Request Header\n```http\nContent-Type: application\u002Fjson\nX-Webhook-Event: new_message\n```\n\n### Request Body\n```json\n{\n  \"emailId\": \"email-uuid\",\n  \"messageId\": \"message-uuid\",\n  \"fromAddress\": \"sender@example.com\",\n  \"subject\": \"Email Subject\",\n  \"content\": \"Email Text Content\",\n  \"html\": \"Email HTML Content\",\n  \"receivedAt\": \"2024-01-01T12:00:00.000Z\",\n  \"toAddress\": \"your-email@moemail.app\"\n}\n```\n\n### Configuration\n1. Click avatar to enter User Profile\n2. Enable Webhook\n3. Set notification URL\n4. Click Test button\n5. Save to receive notifications\n\n### Testing\n\nThe project provides a simple test server:\n\n```bash\npnpm webhook-test-server\n```\n\nThe test server listens on port 3001 (http:\u002F\u002Flocalhost:3001) and prints received Webhook details.\n\nFor external testing, use Cloudflare Tunnel:\n```bash\npnpx cloudflared tunnel --url http:\u002F\u002Flocalhost:3001\n```\n\n### Notes\n- Webhook must respond within 10 seconds\n- Non-2xx response triggers retry\n\n## OpenAPI\n\nThe project provides OpenAPI interfaces, accessible via API Key. API Keys can be created in User Profile (Requires Duke or Emperor role).\n\n### Using API Key\n\nAdd API Key to request header:\n```http\nX-API-Key: YOUR_API_KEY\n```\n\n### API Endpoints\n\n#### Get System Config\n```http\nGET \u002Fapi\u002Fconfig\n```\nResponse:\n```json\n{\n  \"defaultRole\": \"CIVILIAN\",\n  \"emailDomains\": \"moemail.app,example.com\",\n  \"adminContact\": \"admin@example.com\",\n  \"maxEmails\": \"10\"\n}\n```\n\n#### Generate Temp Email\n```http\nPOST \u002Fapi\u002Femails\u002Fgenerate\nContent-Type: application\u002Fjson\n\n{\n  \"name\": \"test\",\n  \"expiryTime\": 3600000,\n  \"domain\": \"moemail.app\"\n}\n```\nParams:\n- `name`: Prefix (optional)\n- `expiryTime`: Validity in ms. 3600000(1h), 86400000(24h), 604800000(7d), 0(Permanent)\n- `domain`: From config\n\nResponse:\n```json\n{\n  \"id\": \"email-uuid-123\",\n  \"email\": \"test@moemail.app\"\n}\n```\n\n#### Get Email List\n```http\nGET \u002Fapi\u002Femails?cursor=xxx\n```\n\n#### Get Messages for Email\n```http\nGET \u002Fapi\u002Femails\u002F{emailId}?cursor=xxx\n```\n\n#### Delete Email\n```http\nDELETE \u002Fapi\u002Femails\u002F{emailId}\n```\n\n#### Get Single Message\n```http\nGET \u002Fapi\u002Femails\u002F{emailId}\u002F{messageId}\n```\n\n#### Create Email Share Link\n```http\nPOST \u002Fapi\u002Femails\u002F{emailId}\u002Fshare\nContent-Type: application\u002Fjson\n\n{\n  \"expiresIn\": 86400000\n}\n```\n\n#### Get Email Share Links\n```http\nGET \u002Fapi\u002Femails\u002F{emailId}\u002Fshare\n```\n\n#### Delete Email Share Link\n```http\nDELETE \u002Fapi\u002Femails\u002F{emailId}\u002Fshare\u002F{shareId}\n```\n\n#### Create Message Share Link\n```http\nPOST \u002Fapi\u002Femails\u002F{emailId}\u002Fmessages\u002F{messageId}\u002Fshare\nContent-Type: application\u002Fjson\n\n{\n  \"expiresIn\": 86400000\n}\n```\n\n#### Get Message Share Links\n```http\nGET \u002Fapi\u002Femails\u002F{emailId}\u002Fmessages\u002F{messageId}\u002Fshare\n```\n\n#### Delete Message Share Link\n```http\nDELETE \u002Fapi\u002Femails\u002F{emailId}\u002Fmessages\u002F{messageId}\u002Fshare\u002F{shareId}\n```\n\n## CLI Tool\n\nMoeMail provides an agent-first CLI tool for AI agents and automation workflows.\n\n### Install\n\n```bash\nnpm i -g @moemail\u002Fcli\n```\n\n### Quick Start\n\n```bash\n# Configure API endpoint and key\nmoemail config set api-url https:\u002F\u002Fmoemail.app\nmoemail config set api-key YOUR_API_KEY\n\n# Create temporary email\nmoemail create --domain moemail.app --expiry 1h --json\n\n# Wait for new messages (polling)\nmoemail wait --email-id \u003Cid> --timeout 120 --json\n\n# Read message content\nmoemail read --email-id \u003Cid> --message-id \u003Cid> --json\n\n# Delete email\nmoemail delete --email-id \u003Cid>\n```\n\n### Agent Workflow\n\nA typical AI agent verification flow in 3 tool calls:\n\n```bash\n# 1. Create mailbox\nEMAIL=$(moemail create --domain moemail.app --expiry 1h --json)\nEMAIL_ID=$(echo $EMAIL | jq -r '.id')\nADDRESS=$(echo $EMAIL | jq -r '.address')\n\n# 2. Wait for verification email\nMSG=$(moemail wait --email-id $EMAIL_ID --timeout 120 --json)\nMSG_ID=$(echo $MSG | jq -r '.messageId')\n\n# 3. Read content, extract verification code\nCONTENT=$(moemail read --email-id $EMAIL_ID --message-id $MSG_ID --json)\n```\n\n### AI Agent Skill\n\nInstall the built-in skill so AI agents (Claude Code, Codex, etc.) automatically know how to use MoeMail:\n\n```bash\n# Auto-detect installed agent platforms and install\nmoemail skill install\n\n# Or specify a platform\nmoemail skill install --platform claude\nmoemail skill install --platform codex\n```\n\nFor full documentation, see [packages\u002Fcli\u002FREADME.md](packages\u002Fcli\u002FREADME.md).\n\n## Environment Variables\n\n### Authentication\n- `AUTH_GITHUB_ID`: GitHub OAuth App ID\n- `AUTH_GITHUB_SECRET`: GitHub OAuth App Secret\n- `AUTH_GOOGLE_ID`: Google OAuth App ID\n- `AUTH_GOOGLE_SECRET`: Google OAuth App Secret\n- `AUTH_SECRET`: NextAuth Secret\n\n### Cloudflare\n- `CLOUDFLARE_API_TOKEN`: Cloudflare API Token\n- `CLOUDFLARE_ACCOUNT_ID`: Cloudflare Account ID\n- `DATABASE_NAME`: D1 Database Name\n- `DATABASE_ID`: D1 Database ID (Optional, auto-fetched if empty)\n- `KV_NAMESPACE_NAME`: KV Name\n- `KV_NAMESPACE_ID`: KV ID (Optional, auto-fetched if empty)\n- `CUSTOM_DOMAIN`: Custom domain\n- `PROJECT_NAME`: Pages Project Name\n\n## Github OAuth App Configuration\n\n1. Login [Github Developer](https:\u002F\u002Fgithub.com\u002Fsettings\u002Fdevelopers) create new OAuth App\n2. Generate `Client ID` and `Client Secret`\n3. Configure:\n   - `Application name`: `\u003Cyour-app-name>`\n   - `Homepage URL`: `https:\u002F\u002F\u003Cyour-domain>`\n   - `Authorization callback URL`: `https:\u002F\u002F\u003Cyour-domain>\u002Fapi\u002Fauth\u002Fcallback\u002Fgithub`\n\n## Google OAuth App Configuration\n\n1. Visit [Google Cloud Console](https:\u002F\u002Fconsole.cloud.google.com\u002F) create project\n2. Configure OAuth consent screen\n3. Create OAuth Client ID\n   - Type: Web application\n   - Authorized Javascript origins: `https:\u002F\u002F\u003Cyour-domain>`\n   - Authorized redirect URIs: `https:\u002F\u002F\u003Cyour-domain>\u002Fapi\u002Fauth\u002Fcallback\u002Fgoogle`\n4. Get `Client ID` and `Client Secret`\n5. Configure env vars `AUTH_GOOGLE_ID` and `AUTH_GOOGLE_SECRET`\n\n## Contribution\n\nWelcome to submit Pull Requests or Issues to help improve this project.\n\n## License\n\n[MIT](LICENSE)\n\n## Community\n\u003Ctable>\n  \u003Ctr style=\"max-width: 360px\">\n    \u003Ctd>\n      \u003Cimg src=\"https:\u002F\u002Fpic.otaku.ren\u002F20250309\u002FAQADAcQxGxQjaVZ-.jpg\" \u002F>\n    \u003C\u002Ftd>\n    \u003Ctd>\n      \u003Cimg src=\"https:\u002F\u002Fpic.otaku.ren\u002F20250309\u002FAQADCMQxGxQjaVZ-.jpg\" \u002F>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr style=\"max-width: 360px\">\n    \u003Ctd>\n      Follow official account for more project updates, AI, Blockchain, and Indie Dev news.\n    \u003C\u002Ftd>\n    \u003Ctd>\n      Add WeChat, remark \"MoeMail\" to join the WeChat community group.\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## Support\n\nIf you like this project, please give it a Star ⭐️\nOr sponsor it\n\u003Cbr \u002F>\n\u003Cbr \u002F>\n\u003Cimg src=\"https:\u002F\u002Fpic.otaku.ren\u002F20240212\u002FAQADPrgxGwoIWFZ-.jpg\" style=\"width: 400px;\"\u002F>\n\u003Cbr \u002F>\n\u003Cbr \u002F>\n\u003Ca href=\"https:\u002F\u002Fwww.buymeacoffee.com\u002Fbeilunyang\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcdn.buymeacoffee.com\u002Fbuttons\u002Fv2\u002Fdefault-blue.png\" alt=\"Buy Me A Coffee\" style=\"width: 400px;\" >\u003C\u002Fa>\n\n## Star History\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F#beilunyang\u002Fmoemail&Date\">\n \u003Cpicture>\n   \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=beilunyang\u002Fmoemail&type=Date&theme=dark\" \u002F>\n   \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=beilunyang\u002Fmoemail&type=Date\" \u002F>\n   \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=beilunyang\u002Fmoemail&type=Date\" \u002F>\n \u003C\u002Fpicture>\n\u003C\u002Fa>\n","MoeMail 是一个基于 NextJS 和 Cloudflare 技术栈构建的临时邮箱服务。该项目的核心功能包括实时接收邮件、灵活的有效期设置（1小时到永久）、支持主题切换和响应式设计，确保在桌面和移动设备上都能良好运行。此外，它还提供了自动清理过期邮箱、PWA 支持以及可爱的用户界面。MoeMail 适用于需要保护真实邮箱地址免受垃圾邮件和不必要的订阅骚扰的场景，同时也适合开发者进行测试或临时使用。项目采用 TypeScript 编写，并遵循 MIT 许可证，允许免费自托管。",2,"2026-06-11 03:47:36","high_star"]