見出し画像

【設計者向け】迷惑メール判定されないお問い合わせフォーム設計

― Rspamdのシンボルから逆算する実装チェックポイント ―


はじめに

お問い合わせフォームから送信したメールが、

  • 一部のキャリアメールに届かない

  • 迷惑メールに振り分けられる

という問題に遭遇したことはありませんか?
私の場合、下の環境で確認しました。

  • 大手国内SaaS・メールサービスプロバイダ

  • 国内キャリアメール


本記事では、
受信側がRspamd系ロジックで判定している想定で、
スパム判定されないWebフォーム設計を設計者視点で解説します。


なぜフォームメールは疑われるのか

フォームメールは構造的に:

  • 送信者と実際の送信元がズレる(調整不足)

  • テンプレート文面(スパムパターン/シグネチャに合致しやすい)

  • URLを含む

  • 一方向通信

簡単に言うと、スパムと特徴が似ているってことです。

💡 結論
フォームメールは「普通に作るとスパム寄りになる」
むしろスパムのほうがまともに見える

そりゃスパム送信業者はそれが本業ですからね

✔ チェックポイント①

From と Envelope From の整合性


❌ NG例

Header From: user@gmail.com
Envelope From: www-data@server.local


 🔥発生しやすいシンボル(Rspamdの標準シンボル)

  • FORGED_SENDER

  • FROM_NEQ_ENVFROM

👉 なりすまし扱い


🆗 正しい設計

From: no-reply@example.com
Envelope From: no-reply@example.com
Reply-To: user@gmail.com


✔️ ポイント

  • Fromは自ドメイン固定

  • ユーザー入力はReply-Toへ


✔ チェックポイント②

Message-ID の整合性


❌ NG例

Message-ID: <12345>


🔥 発生しやすいシンボル

  • MISSING_MID

  • INVALID_MSGID

  • MID_RHS_NOT_FQDN


🆗 正しい例

Message-ID: 20260421.123456.abcdef@example.com


✔️ ポイント

  • FQDN必須

  • Fromと同一ドメイン

  • 一意性確保(時刻+ランダム)

  • ちゃんとRFC 5322に目を通したほうがいい

💡 Message-IDは“身元証明”です。正しく設定しましょう。

https://blastengine.jp/blog_content/message-id/

✔ チェックポイント③

逆引き(rDNS)と直接配送


❌ NG構成

(DNS設定に問題がある)Webサーバ → 相手MXへ直接送信した場合はとくに注意


🔥 発生しやすいシンボル

  • RDNS_NONE

  • HFILTER_HOSTNAME_UNKNOWN

  • DIRECT_TO_MX


🆗 正しい構成

Web → SMTPサーバ → 外部
ほとんどのホスティングサービスではsendmailを使うことで対策OK


✔️ rDNSの正しい状態

IP → mail.example.com
mail.example.com → 同IP


💡 クラウドインスタンス やVPS はデフォルトNGもあるので、DNS周りはチェックしましょう


✔ チェックポイント④

MIME構造の不整合


❌ NG

  • HTMLのみ

  • boundary不正

  • Content-Type不一致


🔥 発生しやすいシンボル

  • MIME_HTML_ONLY

  • MIME_BAD


🆗 正しい構造

multipart/alternative
├ text/plain
└ text/html


✔️ ポイント

  • text/plain必須

  • 自前生成は避ける
     → 信頼できるライブラリを使いましょう


✔ チェックポイント⑤

本文内URLの扱い


❌ NG

  • 短縮URL

  • 表示URLとリンク先不一致

  • IP直リンク


🔥 発生シンボル

  • PHISHING

  • R_SUSPICIOUS_URL

  • SURBL_*


🧑‍🔧設計指針

  • URLは最小限

  • Fromドメインと一致

  • 短縮URL禁止


💡正規のDMなどもけっこう短縮URLで引っかかっています。
 短縮URLが本当に必要かどうかを含めて検討の余地がありますね。

https://blastengine.jp/blog_content/url-shortening/#:~:text=%E8%BF%B7%E6%83%91%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%A8%E3%81%97%E3%81%A6%E5%88%A4%E5%AE%9A%E3%81%95%E3%82%8C%E3%82%8B%E5%8F%AF%E8%83%BD%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8B,-%E7%9F%AD%E7%B8%AEURL%E3%81%AF&text=%E4%BD%9C%E6%88%90%E3%81%95%E3%82%8C%E3%81%9FURL%E3%81%8C,%E3%82%92%E9%81%BF%E3%81%91%E3%82%8B%E5%A0%B4%E5%90%88%E3%82%82%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82

✔ チェックポイント⑥

解除導線(Unsubscribe)の有無


❌ NG

  • 配信停止手段がない

  • 一方通行メール


🤔 なぜ重要か

メールフィルタはスコアだけでなく、ユーザー行動(迷惑メール報告)を誘発してしまいます。

解除手段がない場合:

👉 ユーザーは「迷惑メール報告」するしかない
👉 送信者のレピュテーションが低下
👉 結果的に到達率が悪化


📖 公式ガイドライン(Google)

マーケティングメールはワンクリックで配信停止できる必要があります。

Gmail送信者ガイドライン
https://support.google.com/mail/answer/81126?hl=ja

📧 推奨実装(ヘッダ)

List-Unsubscribe: https://example.com/unsubscribe, mailto:unsubscribe@example.com
List-Unsubscribe-Post: List-Unsubscribe=One-Click


📧 本文での補助導線

配信停止をご希望の場合はこちらからお手続きください。
または
このメールに返信いただくことで配信停止のご連絡を承ります。


✔️ ポイント

  • Rspamd単体では強い加点要素ではない

  • しかし「reputation(信頼性)」に影響する

  • 苦情率を下げる重要な要素


フォームメールであっても、

  • 自動返信メール

  • 継続的な通知メール

などの場合は、解除導線を用意することで迷惑メール判定のリスクを下げることができます。

💣 よくある“落ちるヘッダ構成”

Envelope-From www-data@server.local

From: user@gmail.com
Message-ID: <12345>
HTMLのみ
直接配送
URL多数


🔥 発生シンボル(典型的なコンボ)

  • FORGED_SENDER

  • MISSING_MID

  • MIME_HTML_ONLY

  • DIRECT_TO_MX


✅ 実務チェックリスト


🚀 必須

  • ✅FromとEnvelope From一致

  • ✅ Message-ID正常

  • ✅ SMTPリレー使用

  • ✅ rDNS正しい

  • ✅ MIME正規構造


👍 推奨

  • [  ] text/plain併用

  • [  ] URL最小化

  • [  ] Reply-To適切


🎯 まとめ


✉️ フォームメールは“メールとして正しいか”がすべて


💡 最後に

ここまで「Webフォームからのメールをいかに落とされずに届けるか」という話をしてきました。
ただ正直なところ、今の時代においては「がんばってフォームを自作すること自体が適切なのか?」という視点も必要だと思います。
UIは Googleフォームなどで簡単に構築できますし、取得したデータはAIエージェントに渡せば柔軟に処理できます。

それに対して従来型のWebフォームは、

  • CAPTCHA実装の不備

  • スパム対策の甘さ

  • メール送信まわりの設計不備

といったリスクを抱えがちです。

つまり

「メールが届かない問題」以前に、
フォームそのものがリスクになっているケースもある

と思うのです。


もちろん、要件によっては自前フォームが必要なケースもあるでしょう。

その場合は本記事のチェックポイントが参考になれば幸いですが、一度立ち止まって、

“安全に作る”だけでなく“作るべきか”も含めて設計する🤔

という視点が重要なのかなと思います。