Gmailなどでメールマガジンを受け取った時に、購読停止できるリンクが表示されることがあります。あのような機能はList-Unsubscribeヘッダーによって実現できます。
今回はCustomers Mail Cloudを使ってList-Unsubscribeヘッダーを利用してみます。
List-Unsubscribeの仕組み
List-UnsubscribeはList-Unsubscribe-Postと一緒に使うのが一般的なようです。また、List-Unsubscribe-Postの値は List-Unsubscribe=One-Click
固定のようです。
List-UnsubscribeではメールアドレスまたはURLを指定できます。両方同時も可能です。たとえば以下のように指定します。URLの場合は <>
で囲みます。メールの場合はmailto:を付けます。優先順位は前にあるもののようです。
List-Unsubscribe: <https://example.com/unsubscribe?id=99999999999>, <mailto:unsubscribe.99999999999@unsubscribe.example.com?subject=unsubscribe> List-Unsubscribe-Post: List-Unsubscribe=One-Click
nodemailerでの送信例
nodemailerを使ってメール送信を行う際にはheadersパラメータで指定します。
const info = await transporter.sendMail({ headers: { 'List-Unsubscribe': '<https://example.com/unsubscribe?id=99999999999>, <mailto:unsubscribe.99999999999@unsubscribe.example.com?subject=unsubscribe>', 'List-Unsubscribe-Post': 'List-Unsubscribe=One-Click', }, from: 'Admin <example@smtps.jp>', to: 'user@example.com', subject: "メールマガジンのテスト", text: "Hello world?", html: "<b>Hello world?</b>", });
これでメールを送信し、Gmail側で購読停止すると、迷惑メールに入れる確認ダイアログが出ます。
送信されるデータについて
URLの場合
URLの場合、指定されたURLに対してPOSTメソッドが送られてきます。クエリーストリングで対象を指定するIDを追加しておくのが良いでしょう。
メールの場合
メールの場合はCustomers Mail CloudのWebhookなどでメールを受け取るとURLにPOSTメソッドでリクエストが来ます。メール本文に次のように書かれています。
This message was automatically generated by Gmail.
後はユーザ名などにIDになる部分を適用すれば良さそうです。
まとめ
List-UnsubscribeはメールマガジンだけでなくGitHubリポジトリの購読など通知でも利用されています。ワンクリックで簡単にアクションできるので、ユーザビリティの高い仕組みです。ぜひ使ってみましょう。