概要
2024年の2月からGmailとYahooでは1日5000通以上のメールを送信する場合はワンクリックによるメール購読解除機能を実装することが求められるようになりました
実装する際は以下の情報をメールのヘッダに追加する必要があるのでその方法について解説していきます
List-Unsubscribe-Post: List-Unsubscribe=One-Click
List-Unsubscribe: <https://some-system.jp/unsubscribe/example>
前提
- Djangoのプロジェクトを作成およびデプロイ済み
- Djangoのプロジェクト内でメール送信設定が完了済み
- AWS SESの設定が完了済み
実装
今回はDjangoのEmailMultiAlternativesクラスを使ってメールを送信します
EmailMultiAlternativesクラス内にヘッダを指定できるので以下のように記載します
emails.py
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
def send_email(email):
"""メールを送信する
Args:
email (str): 送信先Eメール
name (str): ユーザ名
"""
plaintext = render_to_string(
"send_email.txt",
)
msg = EmailMultiAlternatives(
subject="テスト",
body=plaintext,
from_email="noreply@example.com",
to=[email],
headers={
"List-Unsubscribe-Post": "List-Unsubscribe=One-Click",
"List-Unsubscribe": "<https://example.com>",
},
)
# 送信
msg.send()
django/core/mail/message.py
class EmailMultiAlternatives(EmailMessage):
"""
A version of EmailMessage that makes it easy to send multipart/alternative
messages. For example, including text and HTML versions of the text is
made easier.
"""
alternative_subtype = "alternative"
def __init__(
self,
subject="",
body="",
from_email=None,
to=None,
bcc=None,
connection=None,
attachments=None,
headers=None,
alternatives=None,
cc=None,
reply_to=None,
):
実際に送信してみよう!
以下のように送信したメールにヘッダが表示されたら成功です
登録解除リンクが表示されない場合は
登録解除リンクについてはGoogle側でドメインが信頼できるかどうかと一定数以上の購読者がいるかどうかを確認してから表示させる仕様だそうです
参考