cloudflare / cloudflare/developer-platform

Email Sending: lowercase info@ZONE rejected with 10202, uppercase INFO@ZONE succeeds

オープン
#65 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
product:email
主要言語
言語のデータがありません
スター
1
フォーク
0
PR マージ指標
30日以内にマージされた PR はありません

説明

### What versions & operating system are you using?

```
System:
OS: macOS 27.0
CPU: (15) arm64 Apple M5 Pro
Shell: 5.9 - /bin/zsh
Binaries:
Node: 26.5.0
npm: 11.17.0
Wrangler: 4.118.0
@cloudflare/workers-types: 5.20260731.1
```

Also reproducible via the Email Sending REST API path that Wrangler calls (`POST /accounts/{account_id}/email/sending/send`). This may be an Email Service platform bug rather than Wrangler itself — filing here because Wrangler surfaces the error and the CLI is the easiest repro.

### Please provide a link to a minimal reproduction

https://gist.github.com/ielyas/5d8755da7497db2d8c1bd7b8ae35beac

### Describe the Bug

**Steps to reproduce**

1. Onboard an apex zone to Cloudflare Email Sending (ours: `ni.sa`; MX remains Google Workspace; `_dmarc` is `p=reject` as added by onboarding).
2. Send with Wrangler from an allowed sender on that zone to `info@ZONE`:

```bash
npx wrangler email sending send \
--from "no-reply@ni.sa" \
--to "info@ni.sa" \
--subject "probe" \
--text "probe"
```

3. Repeat with `--to "INFO@ni.sa"` (same mailbox on Google Workspace).
4. Repeat with other local-parts on the same zone (`contact@`, `elyas@`, `abuse@`, `info@updates.ni.sa` on a sending subdomain, etc.).

**Actual behavior**

- `info@ni.sa` → fails with `email.sending.error.email.invalid [code: 10202]`
- `info+tag@ni.sa` → same failure
- `INFO@ni.sa` / `Info@Ni.Sa` → succeeds (CLI reports delivered)
- Other `@ni.sa` local-parts we tried → succeed
- `info@updates.ni.sa` (subdomain also onboarded for sending) → succeeds

The same failure happens from a Worker `send_email` binding:

```ts
await env.EMAIL.send({
to: "info@ni.sa", // fails
from: { email: "no-reply@ni.sa", name: "Website Contact Form" },
replyTo: "user@example.com",
subject: "Contact Form",
text: "...",
});
```

Using `to: "INFO@ni.sa"` works around it. Account + zone suppression lists were empty (`GET .../email/sending/suppression` → `total: 0`).

**Expected behavior**

Recipient addresses should be treated case-insensitively (or at least `info@ZONE` should not be uniquely rejected when `INFO@ZONE` and other local-parts work). Docs (`llms-full.txt` / error table) describe `10202` as “Invalid email content,” which does not explain a case-sensitive local-part rejection, and examples freely use `info@…` addresses.

Happy to provide account/zone IDs privately if useful.

### Please provide any relevant error logs

```
✘ [ERROR] A request to the Cloudflare API (/accounts/.../email/sending/send) failed.

email.sending.error.email.invalid [code: 10202]
```

From https://developers.cloudflare.com/email-service/api/send-emails/rest-api/ :

| HTTP | Code | Message | Description |
|------|------|---------|-------------|
| 400 | 10202 | email.sending.error.email.invalid | Invalid email content |

Workers binding throws into our catch path as a delivery failure (no distinct string code surfaced in our logs beyond the send failing).

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

リンク先のgistから始め、Wranglerコマンド、POST /accounts/{account_id}/email/sending/sendパス、および小文字と大文字の受信者を使ったWorkers send_emailの例を再現します。結果をREST APIエラーテーブルに記載された10202の行と比較します。大文字と小文字を区別する拒否が修正されるか、プラットフォームの責任であることの確認と想定される動作が明確に文書化されれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
node.js, typescript
領域
api, cli
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
42/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。