Cloudflare Worker无法发送邮件问题排查求助
联系表单邮件无法送达问题
我参考Cloudflare官方文档编写了处理联系表单提交的代码,但邮件始终无法送达。已在Email Routing中验证了邮箱地址,环境变量也已加载。
index.ts
import { EmailMessage } from 'cloudflare:email'; import { createMimeMessage, MIMEMessage } from 'mimetext'; export interface Env { SEB: SendEmail; RECIPIENT_EMAIL: string; SENDER_EMAIL: string; } interface ContactForm { name: string; email: string; subject: string; message: string; } export default { async fetch(request, env, ctx): Promise<Response> { const url = new URL(request.url); if (request.method === 'POST' && url.pathname === '/api/contact') { await handleContactForm(request, env); } return new Response('Message sent!', { status: 201 }); }, } satisfies ExportedHandler<Env>; async function handleContactForm(request: Request, env: Env) { const formData: ContactForm = await request.json(); const { name, email, subject, message } = formData; if (!name || !email || !subject || !message) { return new Response('Missing required fields', { status: 400 }); } console.log(env.RECIPIENT_EMAIL); console.log(env.SENDER_EMAIL); const mime = await createMimeMsg(env, formData); const emailMessage = new EmailMessage(env.SENDER_EMAIL, env.RECIPIENT_EMAIL, mime.asRaw()); try { await env.SEB.send(emailMessage); } catch (e) { // @ts-expect-error unknown return new Response(e.message); } } async function createMimeMsg(env: Env, data: ContactForm): Promise<MIMEMessage> { const msg = createMimeMessage(); msg.setSender({ name: data.name, addr: env.SENDER_EMAIL }); msg.setRecipient(env.RECIPIENT_EMAIL); msg.setSubject(data.subject); msg.addMessage({ contentType: 'text/plain', data: data.message, }); return msg; }
wrangler.jsonc
{ "$schema": "node_modules/wrangler/config-schema.json", "name": "contact-form-worker", "main": "src/index.ts", "compatibility_date": "2025-08-12", "compatibility_flags": ["nodejs_compat"], "observability": { "enabled": true }, "vars": { "RECIPIENT_EMAIL": "${RECIPIENT_EMAIL}", "SENDER_EMAIL": "${SENDER_EMAIL}" }, "send_email": [ { "name": "SEB", "destination_address": "${RECIPIENT_EMAIL}" } ] }
更新:
调用/api/contact接口后,收件人邮箱(尝试过Gmail和Outlook)未收到邮件,垃圾邮件箱中也没有。
后续问题答复:
- 调用env.SEB.send()时是否有错误或日志?没有
- Email Routing是否完全设置且收件人已验证?收件人是我的个人邮箱,根据文档,应该验证的是发件人邮箱
- 是否尝试过不使用MIME格式发送简单测试邮件?您指的是移除
contentType吗?这会导致类型错误,无法实现 - 使用的Wrangler和Email API版本是多少?Wrangler 4.28.1
- Worker外的Email Routing是否正常工作?是的
更新2:
我尝试按照文档使用Resend发送邮件,一切正常!问题似乎出在Cloudflare,可能是Cloudflare服务器被垃圾邮件过滤器列入黑名单。
内容的提问来源于stack exchange,提问作者kaushalyap
相关产品推荐
相关产品推荐

