メール配信に必要な配信停止受け付けのたしなみ

[エンジニアが知っておくべき メール送信・運用ノウハウ、メールの認証技術やセキュリティについて投稿しよう！ by blastengine Advent Calendar 2024](https://qiita.com/advent-calendar/2024/blastengine) の6日目です。


# はじめに

Gmailや米Yahooへのメール送信要件の一環で、マーケティングメールや配信登録（購読）系のメールでは簡単に配信停止できることが求められるようになりました。

また、日本では特定電子メール法による要件があり、オプトアウト方法の記載が必要です。

この記事ではメール配信停止の受け付け方法について簡単におさらいし、実装順のオススメを挙げてみようと思います。

※コードレベルの実装方法そのものは取り扱いません


# 配信停止の受け付け方法のおさらい

配信停止の受け付け方法には下記のような種類があります。
いずれの方法でも、配信停止の申請を受け付けたら人力にせよシステムでの自動対応にせよ迅速に対応する必要があります。

## ワンクリック登録解除（One-click Unsubscribe）

「ワンクリック登録解除」や「One-click Unsubscribe」と呼ばれる解除方法。

メールヘッダにList-UnsubscribeヘッダとList-Unsubscribe-Postヘッダを記載し、両ヘッダをDKIM署名の署名対象に含める。

詳しくは下記を参照してください。
- [RFC 8058](https://datatracker.ietf.org/doc/html/rfc8058)

```
例：メールヘッダ

DKIM-Signature: ****; h=****:list-unsubscribe-post:list-unsubscribe; ****
List-Unsubscribe-Post: List-Unsubscribe=One-Click
List-Unsubscribe: <https://****.example.com/****/unsubscribe?****=****>
```

配信停止申請のシナリオ例

- 読者がList-Unsubscribe-Post対応メーラで配信停止操作すると、List-Unsubscribeで指定したURLにOne-click UnsubscribeのPOSTが来て配信停止申請される


## メールヘッダでList-Unsubscribe(URL)

メールヘッダにList-Unsubscribe(URL)を記載する。

```
例：メールヘッダ

List-Unsubscribe: <https://****.example.com/****/unsubscribe?****=****>
```

配信停止申請のシナリオ例

- 読者がList-Unsubscribe対応メーラで配信停止操作すると、List-Unsubscribeで指定した配信停止フォームに遷移する（GETでアクセス）
- 読者は配信停止フォームで配信停止を申請する


## メールヘッダでList-Unsubscribe(mailto)

メールヘッダにList-Unsubscribe(mailto)を記載する。

```
例：メールヘッダ

List-Unsubscribe: <mailto:****@****.example.com?subject=unsubscribe>
```

配信停止申請のシナリオ例

- 読者がList-Unsubscribe対応メーラで配信停止操作すると、List-Unsubscribeで指定したメールアドレス宛のメール作成画面が開く
- 読者はメールで配信停止を申請する


## メール本文で配信停止フォームのリンク

メール本文に配信停止フォームのURLを載せる。

```
例：メール本文の文末など

配信停止手続はこちらから
https://****.example.com/****/unsubscribe?****=****
```


配信停止申請のシナリオ例

- 読者が配信停止フォームのURLをクリックして遷移する（GETでアクセス）
- 読者は配信停止フォームで配信停止を申請する


## メール本文で配信停止のメールアドレス

メール本文に配信停止のメールアドレスを載せる。

```
例：メール本文の文末など

配信停止手続はこちらから
****@****.example.com
```

配信停止申請のシナリオ例

- 読者が配信停止のメールアドレスをクリックしてメール作成画面が開く
- 読者はメールで配信停止を申請する


# 対応の必要性

どの受け付け方法を実装するのかは各々の判断ですが、日本では特定電子メール法がありますので、この要件を満たせる方法は用意しておく必要があります。

## 特定電子メール法

- 読者によるオプトアウトの通知を受け取るためのメールアドレスまたはURLの記載が必要
- 受信者が容易に認識することができる任意の場所に記載する
    - メール本文の最初または最後が推奨されている

詳しくは下記を参照してください。
- [総務省｜特定電子メールの送信の適正化等に関する法律](https://www.soumu.go.jp/main_sosiki/cybersecurity/kokumin/basic/legal/08/)
- [消費者庁｜特定電子メールの送信の適正化等に関する法律(特定電子メール法)](https://www.caa.go.jp/policies/policy/consumer_transaction/specifed_email/)


## 送信要件として「ワンクリック登録解除（One-click Unsubscribe）」を求められる

送信先リストにGmailや米Yahooメールが含まれている場合（Gmailの場合は件数にもよりますが）は、迷惑メールフォルダに分類されないためにも無視できない要件となります。

- 2024年11月時点ではGmailや米Yahooメール

詳しくは下記を参照してください。
- [Google｜メール送信者のガイドライン](https://support.google.com/a/answer/81126?hl=ja)
- [Yahoo!｜Sender Requirements & Recommendations](https://senders.yahooinc.com/best-practices/)


# 実装オススメ順

実装の優先度を検討してみます。
想定として、読者には下記3パターンのメーラを使っている読者がいるとしてます。

- ワンクリック登録解除に対応しているメーラ
- ワンクリック登録解除に対応してないが、List-Unsubscribe に対応しているメーラ
- ワンクリック登録解除にも、List-Unsubscribe にも対応してないメーラ

優先度の高い順に並べました。

## 第1候補：配信停止フォーム

- 配信停止フォームを表示し、配信停止申請を受け付ける機能
- この配信停止フォームへのURLをメール文面に記載することで、特定電子メール法へ対応する
    - メールアドレスの記載でも良いですが、その場合は人力で配信リストから外す運用になると思いますので数が増えると対応しきれなくなります
- 上記すべてのメーラに対応でき、広くカバーできる


## 第2候補：ワンクリック登録解除（One-click Unsubscribe）

- 送信メールにList-Unsubscribe・List-Unsubscribe-Post・DKIM署名を追加し、配信停止申請のPOSTを受け付ける機能
    - ただしワンクリック登録解除に対応しているメーラしか機能しない
- 送信先リストにGmailや米Yahooメールが含まれており、迷惑メール扱いされたくないなら対応すべき
- GETでリクエストが来たら配信停止フォームを出すように設計しておくとよい
    - List-Unsubscribe(URL) の対応にもなる
    - ワンクリック登録解除には対応してないが List-Unsubscribe には対応しているメーラが存在しており、それらを使っている読者に対して正常に機能する
        - このメーラによりGETで遷移してきた読者に対し、正常な表示ができないと機能不全を感じさせる

## 必要に応じて：List-Unsubscribe(URL) や List-Unsubscribe(mailto)

- 配信停止フォームの実装があれば、これらを単体で実装する優先度はあまり高くならないと思います
    - 基本的には本文の配信停止フォームリンクでこと足りる
- 読者にとっては配信停止方法の選択肢が増える
- List-Unsubscribe に対応する場合は、URL と mailto の両方に対応するのが望ましい
    - 一部のメーラでは URL の List-Unsubscribe には反応せず、mailto しか機能しないため


# さいごに

枯れているようで、取り巻く環境の変化がそこそこあるメール界隈。
スパムやフィッシングの増加などへの対策として、今後も環境は変化し続けると思います。

ですが、特定団体のインフラやサービスに依存しないオープンな技術という一面は、メッセージング系サービスの中でメールが持つ強みです。ユーザや読者とのつながりの手段の1つとして今後も使われ続け、進化し続けると考えています。

この記事の情報が、どなたかのキャッチアップのお役に立てれば幸いです。