はじめに
システムやアプリケーションを開発していると、メール送信は避けて通れない重要なタスクの一つです。
ですが、そのメールが受信者側の迷惑メールフォルダに入ってしまうと、ビジネスの信頼を失うだけでなく、場合によっては大きな損失につながることもあったりします。
この記事では、メールが正しく届けられるようにするための基本的なメール認証についてまとめました。
メール送信を実装する際のお役に立てれば幸いです。
なぜメール認証が必要なのか?
まず、メール認証がなぜ重要かについて。基本的に、メール認証の目的は以下の3つです。
- 送信者の正当性を証明する(本物だよ!と証明する)
- 受信者に安心感を与える
- なりすましやフィッシングを防ぐ
これらを実現するために、SPF、DKIM、DMARCといった認証の技術を使います。
これらをきちんと設定すれば、迷惑メールフォルダに振り分けられるリスクを減らしてメールの到達率を大幅に改善できます。
SPF
SPFは「このドメインからメールを送信して良いサーバーはこれです」と宣言する仕組みで、これを正しく設定することで、なりすましメールを防ぎ、メールの信頼性を高めることができます。
SPFレコードの作成例
例えばexample.comからメールを送る場合、DNSに次のようなレコードを追加します。
example.com. IN TXT "v=spf1 ip4:192.0.2.0/24 include:_spf.google.com ~all"
それぞれを解説すると、
- v=spf1:SPFのバージョンを指定
- ip4:192.0.2.0/24:このIPアドレス範囲からのメールを許可
- include:_spf.google.com;Googleのサーバーも許可
- ~all:許可されていないサーバーからのメールは警告に
SPFのincludeは最大10個までしか使えず、多すぎると無効になります。
また、SPFはメール転送時に失敗することがあります。
そのため、SPFだけでなく、DMARCやDKIMと併用していくのことが重要になります。
DKIM
DKIMは、送信したメールに電子署名を付けることで、送信者を認証し、メールが途中で改ざんされていないことを保証します。
簡単にいうと、途中で変なことされてないよ!と証明できる仕組みになります。
DKIMの設定手順
1.鍵を作る
まずは秘密鍵と公開鍵を作成します。
openssl genrsa -out dkim_private.key 2048
openssl rsa -in dkim_private.key -pubout -out dkim_public.key
2.公開鍵をDNSに登録
公開鍵をDNSレコードに設定します。
default._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=公開鍵"
3.秘密鍵をメールサーバーに設定
使用しているメールサーバー(Postfix、SendGridなど)でDKIM署名を有効にします。
複数の鍵を使う場合はセレクター名(defaultなど)を一意に設定しましょう。
また、半年ごとや1年ごとに定期的に鍵を更新してセキュリティを確保することも重要です。
DMARC
DMARCはSPFやDKIMと連携して、メールがどう扱われるかを決める仕組みです。
さらに、メールが届いた状況をレポートで確認できるのも便利なポイント。レポートで不正なメールの送信元や失敗した認証の情報を収集できます。
DMARCレコードの作成例
以下は「example.com」に設定するDMARCレコード例です。
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com; ruf=mailto:dmarc-failures@example.com; sp=reject; aspf=r"
- p=quarantine: SPF/DKIMに失敗したメールは迷惑メールフォルダに入れる
- rua: 集計レポートを送る先
- ruf: フォレンジックレポートを送る先
- sp=reject: サブドメインのポリシー
- aspf=r: SPFの緩やかな一致(Relaxed Alignment)
まずp=noneでレポート収集から始め、問題がないことを確認してからquarantineやrejectに移行するのが安全です。
その他の運用ポイント
- スパムっぽい言葉を避ける
メールの内容に「無料」「今すぐ」「限定」などの言葉を多用すると、スパムフィルターに引っかかりやすくなります。
特に、「全額無料!」「クリック必須!」のような誇張表現はリスク高いので、避けた方がいいかもしれません。
例えば、
×:今すぐ限定セール!
○:この週末限定セールをお見逃しなく
など。
-
HTMLとプレーンテキストを両方用意する
HTMLメールはデザイン性に優れているものの、例えば古いメールクライアントなど、すべての受信環境で正しく表示されるとは限らず、一部のスパムフィルターやメールクライアントではプレーンテキスト版がないと不完全なメールと判断されることもあったりします。 -
送信頻度の管理
大量のメールを短時間に送ると、受信サーバー側でスパム攻撃とみなされるリスクがあります。
丁寧にやるのであれば、以下のような安全な運用方法をとるといいかもしれません。
1.段階的に送信数を増やす
初回は1000通程度から始め、問題がないことを確認しながら徐々に増やしていく
2.送信間隔を調整する
メールサーバーがサポートするスロットリング(送信速度制限)機能を活用して、適切なペースで送信していく
3.リストの品質を保つ
定期的にアドレスリストを見直し、配信エラーが続くアドレスを削除することで、信頼スコアを維持する
このように、メール認証の基本的な部分をおさえた上で、日々の運用にも気をつけることで、迷惑メールフォルダに入るリスクを減らし、より信頼性の高いメール送信ができるようになります。