Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -40,14 +40,14 @@ yarn-error.log*
*.tsbuildinfo
next-env.d.ts

# wrangler
.wrangler
wrangler.toml
wrangler.email.toml
wrangler.cleanup.toml
# wrangler.json 需要提交到 GitHub 用于 Pages 部署
wrangler.cleanup.json
wrangler.email.json

public/workbox-*.js
public/sw.js

wrangler.json
wrangler.cleanup.json
wrangler.email.json
public/sw.js
23 changes: 19 additions & 4 deletions workers/email-receiver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
21 changes: 21 additions & 0 deletions wrangler.json
Original file line number Diff line number Diff line change
@@ -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"
}
]
}