From b2d831c6c5111ffe7fdfefa7c1c34ee10195e5f9 Mon Sep 17 00:00:00 2001 From: Developer <11658@example.com> Date: Fri, 17 Apr 2026 02:42:09 +0800 Subject: [PATCH 1/3] Initial commit --- .gitignore | 10 +++++----- workers/email-receiver.ts | 23 +++++++++++++++++++---- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 93d59c36..6667f71f 100644 --- a/.gitignore +++ b/.gitignore @@ -40,14 +40,14 @@ yarn-error.log* *.tsbuildinfo next-env.d.ts +# wrangler .wrangler wrangler.toml wrangler.email.toml wrangler.cleanup.toml - -public/workbox-*.js -public/sw.js - wrangler.json wrangler.cleanup.json -wrangler.email.json \ No newline at end of file +wrangler.email.json + +public/workbox-*.js +public/sw.js \ No newline at end of file diff --git a/workers/email-receiver.ts b/workers/email-receiver.ts index 26c6f721..54ce9c35 100644 --- a/workers/email-receiver.ts +++ b/workers/email-receiver.ts @@ -7,15 +7,30 @@ import { WEBHOOK_CONFIG } from '../app/config/webhook' import { EmailMessage } from '../app/lib/webhook' const handleEmail = async (message: ForwardableEmailMessage, env: Env) => { - const db = drizzle(env.DB, { schema: { messages, emails, webhooks } }) + console.log("Received email message:", { + to: message.to, + from: message.from, + subject: message.headers.get('subject') + }) - const parsedMessage = await PostalMime.parse(message.raw) + const db = drizzle(env.DB, { schema: { messages, emails, webhooks } }) - console.log("parsedMessage:", parsedMessage) + let parsedMessage + try { + parsedMessage = await PostalMime.parse(message.raw) + console.log("parsedMessage subject:", parsedMessage.subject) + } catch (parseError) { + console.error("Failed to parse message:", parseError) + return + } try { + // Handle message.to - it might be an array or object + const toAddress = typeof message.to === 'string' ? message.to : message.headers.get('to') || '' + console.log("Looking for email:", toAddress.toLowerCase()) + const targetEmail = await db.query.emails.findFirst({ - where: eq(sql`LOWER(${emails.address})`, message.to.toLowerCase()) + where: eq(sql`LOWER(${emails.address})`, toAddress.toLowerCase()) }) if (!targetEmail) { From b3d7c09bcc26ed755c38469529630b83ae51e2f2 Mon Sep 17 00:00:00 2001 From: Developer <11658@example.com> Date: Fri, 17 Apr 2026 10:06:41 +0800 Subject: [PATCH 2/3] Add wrangler.json for Cloudflare Pages deployment --- .gitignore | 2 +- wrangler.json | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 wrangler.json diff --git a/.gitignore b/.gitignore index 6667f71f..e559ec4a 100644 --- a/.gitignore +++ b/.gitignore @@ -45,7 +45,7 @@ next-env.d.ts wrangler.toml wrangler.email.toml wrangler.cleanup.toml -wrangler.json +# wrangler.json 需要提交到 GitHub 用于 Pages 部署 wrangler.cleanup.json wrangler.email.json diff --git a/wrangler.json b/wrangler.json new file mode 100644 index 00000000..15666911 --- /dev/null +++ b/wrangler.json @@ -0,0 +1,21 @@ +{ + "$schema": "node_modules/wrangler/config-schema.json", + "name": "moemail", + "compatibility_date": "2024-03-20", + "compatibility_flags": ["nodejs_compat"], + "pages_build_output_dir": ".vercel/output/static", + "d1_databases": [ + { + "binding": "DB", + "database_name": "moemail-local", + "database_id": "4cd36273-f0af-417d-9d6f-caa396860b53", + "migrations_dir": "drizzle" + } + ], + "kv_namespaces": [ + { + "binding": "SITE_CONFIG", + "id": "206ee89221214b27988a8ea691eb3a0e" + } + ] +} From 5bc6ff713d1b274585ab13717ebc25ba5d89252a Mon Sep 17 00:00:00 2001 From: Developer <11658@example.com> Date: Fri, 17 Apr 2026 10:41:59 +0800 Subject: [PATCH 3/3] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=20.gitignore=20?= =?UTF-8?q?=E5=BF=BD=E7=95=A5=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e559ec4a..cd90d1d6 100644 --- a/.gitignore +++ b/.gitignore @@ -30,7 +30,7 @@ yarn-debug.log* yarn-error.log* # env files (can opt-in for committing if needed) -.env* +.env.local !.env.example # vercel