AIでメルマガの配信対象一覧を確認する方法|購読状態・除外・重複を分ける

架空7行を確認候補1・除外3・保留3へ照合。購読中と除外リストの矛盾、同一宛先2行、確認待ちを残し、送信可否や配信完了とは分けます。

AIものさし編集部

AIでメルマガの配信対象一覧を確認するときは、連絡先の件数だけを数えません。購読状態、今回の配信除外リスト、同一宛先の重複を分け、判断できない行を残します。購読中という表示だけで、あらゆる案内を送れると決めないことも大切です。

この記事では、架空の7行から、確認候補・除外・保留を作ります。成果物は元行と理由を追える確認表で、実際の連絡先取得、AI分類、インポート、配信は行いません。法的な送信可否や、到達性を判定する例でもありません。

連絡先として保存されていることと、購読中を分ける

Mailchimpは、連絡先をsubscribed、unsubscribed、non-subscribed、cleaned、pendingなどに分けています。subscribedはマーケティング受信へオプトインした状態、unsubscribedは停止した状態、non-subscribedは接点があってもオプトインしていない状態として説明しています。pendingにはオプトイン確認が残ります。Mailchimp:連絡先の種類(新しいタブで開く)

同社は、メールとSMSの購読手続きが別であることも説明しています。今回の対象はメールのマーケティング配信だけです。購入履歴があること、SMSを購読していること、注文通知を受け取れることを、メルマガ購読へ置き換えません。

実際の送信条件は、適用地域、取得時の説明、利用目的、組織の運用なども関係します。Mailchimpの状態名を、すべてのサービスや地域の法的許可へ一般化しません。ここでは、指定した架空条件に対する一覧の整合だけを確認します。

今回の確認条件と、除外リストの版を固定する

架空の配信案は、ニュースレターN01の2026年10月20日版です。購読状態はこのニュースレターのメール購読に関する取得済み記録とします。配信前の確認表なので、状態を変更する操作は含めません。

今回の独自ルールは、配信除外リストにある宛先は候補へ入れない、購読停止・未購読も除外、確認待ちは保留です。購読中でも同一宛先が複数行にある場合は、両行を保留し、担当者が元記録を確認する設定にします。

別々の資料で状態が矛盾する場合も、新しい方をAIが選んで購読を復活させません。今回の除外リストは確認表で優先する指定資料です。実務では、その対象範囲、更新時点、解除手順、再購読の確認方法を担当者が確定します。

同じ宛先を、先勝ちで消さずに残す

次の値は独自の架空例です。example.invalidは実在の配信先ではありません。ここでは文字列が完全一致する宛先だけを重複とします。

表は横にスクロールできます

元行連絡先ID架空宛先メール購読状態今回の除外リスト
R01C01a@example.invalid購読中なし
R02C02b@example.invalid購読中あり
R03C03c@example.invalid購読停止なし
R04C04d@example.invalid確認待ちなし
R05C05e@example.invalid未購読なし
R06C06a@example.invalid購読中なし
R07C07f@example.invalid購読中なし

R01とR06は別IDでも、宛先が同じです。どちらを残すか、同一人物か、別の登録経路かはこの表から決まりません。最初の行だけを採用するのではなく、両方の元行IDを残します。

大文字小文字、別名、ドット、省略、転送先を変換して同一宛先へまとめる処理は今回行いません。利用サービスの識別規則と確認済みの対応表なしに、似たアドレスを同じ人と推測しないでください。

元行ごとに、候補へ入れない理由を示す

表は横にスクロールできます

元行この確認表の状態理由
R01保留R06と同じ宛先。元記録の確認待ち
R02除外購読中表示でも、今回の除外リストにある
R03除外メール購読停止
R04保留購読の確認待ち
R05除外メール未購読
R06保留R01と同じ宛先。元記録の確認待ち
R07確認候補この例の3条件では除外・保留に該当しない

結果は、確認候補1行、除外3行、保留3行で、元の7行へ対応します。宛先文字列は6種類ですが、6人と本人を確認した意味ではありません。重複は1組・2行です。

確認候補は送信許可や送信済みという状態ではありません。R07も、本文の内容、今回の利用目的、差出人、停止リンク、配信設定などの確認を終えたわけではありません。候補件数を「送信可能な人数」と報告しないでください。

除外と保留も分けます。R02・R03・R05は指定条件で候補から外す行、R01・R04・R06は確認事項が残る行です。保留を購読中へ変える、除外を削除済みにするなど、元の購読状態や連絡先を変更していません。

固定例の計数を検算する

次のコードは架空の7行だけを計数します。除外条件を先に見て、購読中でも除外リストを上書きしない順序にしています。

from collections import Counter

rows = [
    ("R01", "a@example.invalid", "SUBSCRIBED"),
    ("R02", "b@example.invalid", "SUBSCRIBED"),
    ("R03", "c@example.invalid", "UNSUBSCRIBED"),
    ("R04", "d@example.invalid", "PENDING"),
    ("R05", "e@example.invalid", "NON_SUBSCRIBED"),
    ("R06", "a@example.invalid", "SUBSCRIBED"),
    ("R07", "f@example.invalid", "SUBSCRIBED"),
]
suppressed = {"b@example.invalid"}
counts = Counter(email for _, email, _ in rows)
result = {}
for row_id, email, state in rows:
    if email in suppressed or state in {"UNSUBSCRIBED", "NON_SUBSCRIBED"}:
        result[row_id] = "EXCLUDE"
    elif state != "SUBSCRIBED" or counts[email] > 1:
        result[row_id] = "REVIEW"
    else:
        result[row_id] = "CANDIDATE"
assert result == {
    "R01": "REVIEW", "R02": "EXCLUDE", "R03": "EXCLUDE",
    "R04": "REVIEW", "R05": "EXCLUDE", "R06": "REVIEW",
    "R07": "CANDIDATE",
}
assert Counter(result.values()) == {"CANDIDATE": 1, "EXCLUDE": 3, "REVIEW": 3}
assert len(counts) == 6
assert {email: n for email, n in counts.items() if n > 1} == {"a@example.invalid": 2}
print(result)

掲載例をローカルで実行し、別の検算では宛先ごとに元行を対応づけ、重複1組2行と、状態別の1・3・3行を確認しました。入力の欠損、全種類の製品状態、住所録の型、複数ニュースレターの権限関係などを網羅する汎用処理ではありません。

実務の確認表には、どの資料の版を使ったかも付けます。抽出後に購読停止が追加された場合、古い確認表を送信時の正本へしません。最新の配信条件と対象の読み戻しは、実際の配信作業で別に確認します。

AIには、候補表と確認質問を返させる

架空のニュースレターN01の連絡先7行を確認してください。
今回の配信除外リストを優先し、購読中という状態で除外を上書きしないでください。
購読停止・未購読は除外、確認待ちは保留です。
同一宛先の複数行は両方を保留し、元行IDを残してください。
アドレスの別名や大文字小文字を変換して推測で統合しないでください。
出力:元行別の確認候補・除外・保留と理由、件数、確認質問。
確認候補を送信許可や本人確認済みと書かないでください。
連絡先の削除・購読変更、インポート、配信は行いません。

依頼と状態表は手製で、AIの実行結果ではありません。確認質問は「R01・R06の登録経路と今回採用する記録はどれか」「R04の確認手続きは完了しているか」「R02の資料間の状態差はどこで管理するか」です。質問を作ったことと、解消したことを分けて記録します。

元の購読状態を消さず、別の列で今回の候補判定を持つと、なぜその行を外したかを説明できます。表の確認が終わったことと、利用目的や配信内容を含む最終確認が終わったこと、実際に送信したことを別の状態として管理してください。

参考資料

公式資料の確認日:2026年10月20日。連絡先、アドレス、購読記録、除外リスト、判定条件、依頼文は独自の架空例です。掲載コードと独立した元行照合をローカルで検査しました。実連絡先、AI分類、本人確認、法的な送信可否、製品設定、購読変更、配信・到達、画面表示は未検証です。

質問から自分に合うAIを探す