EasyStarter logoEasyStarter
Email Service

Cloudflare Email Service

Send real email in production and local development with Cloudflare Email Service

Cloudflare Email Service

Cloudflare Email Service is a convenient option when your domain is already managed by Cloudflare. Once configured, users can receive sign-up verification, password reset, and email verification code messages in their own inboxes.

Cloudflare Email Service does not require a separate email API key or any additional email environment variables.

Enable email sending in production

Enable Email Sending

  1. Sign in to the Cloudflare dashboard
  2. Go to Compute → Email Service → Email Sending
  3. Click Onboard Domain and select your sender domain
  4. Complete the DNS setup shown on the page
  5. Wait until the domain is enabled

When the domain is already managed by Cloudflare, the required records can usually be configured directly from the dashboard. Sending to arbitrary real user addresses requires the Workers Paid plan.

Select Cloudflare as the email provider

In packages/app-config/src/app-config.ts, switch the email provider to cloudflare and enter the domain you just verified:

packages/app-config/src/app-config.ts
email: {
  provider: "cloudflare",
  from: {
    localPart: "noreply",
    domain: "yourdomain.com",
  },
},

Deploy and receive a test email

Deploy the server normally. A deployed Worker connects directly to the real Cloudflare email service. remote: true is only for local testing and is not required in production.

After deployment, use a real address to trigger sign-up verification, forgot password, or an email verification code. Receiving the message confirms that production sending is active. If it does not appear immediately, check the spam folder and the activity log on the Cloudflare Email Sending page.

Receive real email during local development

By default, Cloudflare simulates email sending during local development. The message is shown in the terminal and saved as a local preview, but nothing is delivered to a real inbox.

To receive the message in your own test inbox, temporarily enable remote sending in apps/server/wrangler.jsonc:

apps/server/wrangler.jsonc
"send_email": [
  {
    "name": "EMAIL",
    "remote": true,
  },
],

Make sure Wrangler is signed in to the Cloudflare account that owns the onboarded domain, restart the local server, and trigger sign-up verification, forgot password, or an email verification code. The message will be delivered to the test address you entered. Check the spam folder if it is not visible in the inbox.

Remove remote: true after testing to avoid sending real email accidentally during everyday development. Cloudflare activity logs may appear later than the email itself, so use the received test message as the primary confirmation.