すべてのプロダクト
Search
ドキュメントセンター

Direct Mail:SMTP メッセージヘッダー設定による機能の制御

最終更新日:Nov 26, 2025

警告

設定項目が正しく設定されていない場合、メール送信時にエラーが発生します。本番環境に公開する前に、必ず設定をテストしてください。

Direct Mail では、`X-AliDM-Settings` メッセージヘッダーを使用して特定の機能を制御できます。

重要

`X-AliDM-Settings` は大文字と小文字を区別します。エラーを避けるため、ヘッダーをコピーして貼り付けてください。

たとえば、フィルターレベルをメールドメインに設定してサブスクライブ解除リンクを生成するには、デフォルトのポリシーを使用できます。これは、バッチ送信元アドレスから特定のドメイン名にメールを送信する場合に便利です。

  1. 次のフォーマットで JSON 文字列を作成します。

{"Version":"1.0","Unsubscribe":{"FilterLevel":"mailfrom_domain","LinkType":"zh-cn"},"OutboundIp":{"IpPoolId":"xxx"}}
  1. JSON 文字列を Base64 エンコードします。

eyJWZXJzaW9uIjoiMS4wIiwiVW5zdWJzY3JpYmUiOnsiRmlsdGVyTGV2ZWwiOiJtYWlsZnJvbV9kb21haW4iLCJMaW5rVHlwZSI6InpoLWNuIn0sIk91dGJvdW5kSXAiOnsiSXBQb29sSWQiOiJ4eHgifX0=

  1. エンコードされた文字列を `X-AliDM-Settings` メッセージヘッダーの値として設定します。メールを送信した後、メッセージヘッダーをチェックして `X-AliDM-Settings` が正しく設定されていることを確認します。

X-AliDM-Settings: eyJWZXJzaW9uIjoiMS4wIiwiVW5zdWJzY3JpYmUiOnsiRmlsdGVyTGV2ZWwiOiJtYWlsZnJvbV9kb21haW4iLCJMaW5rVHlwZSI6InpoLWNuIn0sIk91dGJvdW5kSXAiOnsiSXBQb29sSWQiOiJ4eHgifX0=

次の Python の例は、メッセージヘッダーを追加する方法を示しています: msg.add_header("X-AliDM-Settings", Create_base64Trace)

以下の例では、他の言語で X-AliDM-Settings 値を生成する方法を示します。

import json
import base64

# サブスクライブ解除ロジック
Create_json = {
    "Version" : "1.0",
    "Unsubscribe" : {
    # 必要に応じてパラメーターを選択します。
        # "LinkType": "disabled",  # サブスクライブ解除メッセージヘッダーを生成しません。
        "LinkType": "default", # デフォルトポリシー。en-us のサブスクライブ解除リンクのイベントトラッキングを有効にします。

        # "FilterLevel": "disabled", # フィルターしません。
        # "FilterLevel": "default", # デフォルトポリシー。送信元アドレスレベルでバッチアドレスをフィルターします。
        # "FilterLevel": "mailfrom", # 送信元アドレスレベルでフィルターします。
        "FilterLevel": "mailfrom_domain" # メールドメインレベルでフィルターします。
        # "FilterLevel": "edm_id" # アカウントレベルでフィルターします。
    },
    "OutboundIp" : {
        "IpPoolId" : "exxxxxxe-4xx0-4xx3-8xxa-7xxxxxxxxxxxxf"  # 必要に応じて、Direct Mail コンソールで専用 IP アドレスを購入し、IP プール ID を取得します。
    }
}
Create_jsonTrace = json.dumps(Create_json)
Create_base64Trace = str(base64.b64encode(Create_jsonTrace.encode('utf-8')), 'utf-8')
# print(base64Trace)
msg.add_header("X-AliDM-Settings", Create_base64Trace)
# サブスクライブ解除ロジック
import java.util.Base64;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import java.nio.charset.StandardCharsets;

private static String generateDmSettingsHeader() {
        String jsonContent = """
            {
                "Version": "1.0",
                "Unsubscribe": {
                    "LinkType": "default", // デフォルトポリシー。en-us のサブスクライブ解除リンクのイベントトラッキングを有効にします。
                    "FilterLevel": "mailfrom_domain" // メールドメインレベルでフィルターします。
                },
                "OutboundIp": {
                    "IpPoolId": "exxxxxxe-4xx0-4xx3-8xxa-7xxxxxxxxxxxxf" // 必要に応じて、Direct Mail コンソールで専用 IP アドレスを購入し、IP プール ID を取得します。
                }
            }
            """;

        JsonElement jsonElement = JsonParser.parseString(jsonContent);
        String compactJson = new Gson().toJson(jsonElement);
        
        return Base64.getEncoder()
            .encodeToString(compactJson.getBytes(StandardCharsets.UTF_8));
    }
// JSON を構築します。
	$createJson = [
		"Version" => "1.0",
		"Unsubscribe" => [
			"LinkType" => "default",       // デフォルトポリシー。
			"FilterLevel" => "mailfrom_domain" // メールドメインレベルでフィルターします。
		],
		"OutboundIp" => [
			"IpPoolId" => "exxxxxxe-4xx0-4xx3-8xxa-7xxxxxxxxxxxxf" // ご利用の IP プール ID に置き換えます。
		]
	];

	// JSON 文字列に変換します。
	$jsonString = json_encode($createJson, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);

	// Base64 エンコードします。
	$base64Trace = base64_encode($jsonString);

	// カスタムメッセージヘッダーを追加します。
	$mail->addCustomHeader('X-AliDM-Settings', $base64Trace);

Java の例 2:

package ut_dm;

import com.alibaba.fastjson.JSON;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.HashMap;
import java.util.Map;


public class AliDMSetting {
    static public enum UnsubFilterLevel {
        DISABLED("disabled"),
        DEFAULT("default"),
        MAILFROM("mailfrom"),
        MAILFROM_DOMAIN("mailfrom_domain"),
        EDM_ID("edm_id");

        private final String value;

        UnsubFilterLevel(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }
    static public enum UnsubLinkType {
        DISABLED("disabled"), // サブスクライブ解除リンクを追加しません。
        DEFAULT("default"),   // デフォルトポリシー。Google および Yahoo のアドレスに送信されるマーケティングメールの場合、en_US のサブスクライブ解除リンクのイベントトラッキングを有効にします。
        ZH_CN("zh-cn"),       // 中国語 (簡体字)
        EN_US("en-us");       // 英語 (米国)、デフォルト

        private final String value;

        UnsubLinkType(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    public static String X_ALIDM_SETTING_HEADER_KEY = "X-AliDM-Settings";
    public static String X_ALIDM_SETTING_VERSION = "1.0";
    private UnsubLinkType unsubLinkType;
    private UnsubFilterLevel unsubFilterLevel;
    private String ipPoolId;
    public AliDMSetting(UnsubLinkType unsubLinkType, UnsubFilterLevel unsubFilterLevel, String ipPoolId) {
        this.unsubLinkType = unsubLinkType;
        this.unsubFilterLevel = unsubFilterLevel;
        this.ipPoolId = ipPoolId;
    }

    private String generateHeaderValue() {
        HashMap<String,String> unsubSetting = new HashMap<String,String>();
        unsubSetting.put("LinkType", unsubLinkType.getValue());
        unsubSetting.put("FilterLevel", unsubFilterLevel.getValue());

        HashMap<String,Object> setting = new HashMap<>();
        setting.put("Version", X_ALIDM_SETTING_VERSION);
        setting.put("Unsubscribe", unsubSetting);
        if(StringUtils.isNotBlank(ipPoolId)) {
            Map<String, String> outboundIpsMap = new HashMap<>();
            outboundIpsMap.put("IpPoolId", ipPoolId);
            setting.put("OutboundIp", outboundIpsMap);
        }

        return new String( Base64.encodeBase64(JSON.toJSONString(setting).getBytes()) );
    }

    public void generateHeader(MimeMessage message) throws MessagingException {
        message.addHeader(X_ALIDM_SETTING_HEADER_KEY, generateHeaderValue());
    }
}

サポートされている機能を次の表に示します。

機能

第 1 レベルキー

第 2 レベルキー

説明

サブスクライブ解除機能

Unsubscribe

LinkType

生成するサブスクライブ解除リンクのタイプ。

  • disabled:リンクを生成しません。

  • default:デフォルトポリシーを使用します。バッチ送信元アドレスから特定のドメイン名にメールを送信すると、サブスクライブ解除リンクが生成されます。詳細については、「サブスクライブ解除機能のリンク生成とフィルタリング」をご参照ください。

  • zh-cn:リンクを生成します。これは将来のコンテンツのイベントトラッキング用です。

  • このコンテンツは、将来のコンテンツのイベントトラッキングをサポートするために en-us 用に生成されます。

FilterLevel

フィルターレベル。

  • disabled:フィルターしません。

  • default:デフォルトポリシーを使用します。バッチアドレスは送信元アドレスレベルでフィルターされます。詳細については、「サブスクライブ解除機能のリンク生成とフィルタリング」をご参照ください。

  • mailfrom:送信元アドレスレベルでフィルターします。

  • mailfrom_domain:メールドメインレベルでフィルターします。

  • edm_id:アカウントレベルでフィルターします。

専用 IP 機能

OutboundIp

IpPoolId

専用 IP アドレスプールの ID。専用 IP アドレスを購入した場合、このパラメーターを使用してメール送信用のアウトバウンド IP アドレスを指定します。

受信者のメッセージヘッダーの例:

次の例は、プライバシー保護のため一部編集されています。メッセージヘッダーからサブスクライブ解除リンクを取得するには、受信者のメールボックスに移動し、テストメールの .eml ファイルをダウンロードまたは表示します。

List-Unsubscribe-Post: List-Unsubscribe=One-Click
List-Unsubscribe: <http://dm-cn.aliyuncs.com/trace/v1/unsubscribe?lang=zh-cn&sign=cd03d4d252bxxxxxxxx0d99c&token=eyJjYW1wYWlnbl90aW1lIjoxNzA2MjU3NjxxxxxxxxxxxxxxxxjAzNTUxNDMiLCJtYWlsX2Zyb20iOiJ6azFAdDEuemtkbS54eXoiLCJtYWlsX3RvIjoiemsxQHprZG0ueHl6In0%3D&version=1.0>
説明

List-Unsubscribe-Post: List-Unsubscribe=One-Click ヘッダーは、ワンクリックでのサブスクライブ解除機能をコントロールします。

  • このヘッダーは、メールがワンクリックサブスクライブ解除をサポートしていることを宣言します。サブスクライブ解除のアクションは HTTP POST リクエストを介して直接完了し、ユーザーによる 2 回目の確認は必要ありません。

  • このヘッダーを省略した場合、または標準外の値や空の値を使用した場合、サブスクライブ解除プロセスは従来の mailto: またはリンクのリダイレクトメソッドにフォールバックする可能性があります。このメソッドでは、ユーザーによる手動での確認が必要です。

  • サブスクライブ解除ボタンが表示されるかどうかは、受信者のポリシーによって決まります。一部のサービスプロバイダーは、送信元アドレスまたはドメイン名のレピュテーションが良い場合にのみボタンを表示します。受信者のメールボックスにログインして結果をテストしてください。

  • ボタンが表示されない場合は、次のコマンドを使用して生成されたリンクをテストすることもできます。

Linux テストコマンド:

次の例は、プライバシー保護のため一部編集されています。メッセージヘッダーからサブスクライブ解除リンクを取得するには、受信者のメールボックスに移動し、テストメールの .eml ファイルをダウンロードまたは表示します。

curl -X POST "http://dm-cn.aliyuncs.com/trace/v1/unsubscribe?lang=zh-cn&sign=cd03d4d252bxxxxxxxx0d99c&token=eyJjYW1wYWlnbl90aW1lIjoxNzA2MjU3NjxxxxxxxxxxxxxxxxjAzNTUxNDMiLCJtYWlsX2Zyb20iOiJ6azFAdDEuemtkbS54eXoiLCJtYWlsX3RvIjoiemsxQHprZG0ueHl6In0%3D&version=1.0"
or
curl -X POST -d "lang=zh-cn&sign=cd03d4d252bxxxxxxxx0d99c&token=eyJjYW1wYWlnbl90aW1lIjoxNzA2MjU3NjxxxxxxxxxxxxxxxxjAzNTUxNDMiLCJtYWlsX2Zyb20iOiJ6azFAdDEuemtkbS54eXoiLCJtYWlsX3RvIjoiemsxQHprZG0ueHl6In0%3D&version=1.0" "http://dm-cn.aliyuncs.com/trace/v1/unsubscribe"

結果の例:

退订测试.png

独自の購読解除メールボックスまたはリンクを使用する

SMTP を使用してメールを送信する場合、独自のサブスクライブ解除メールボックスまたはリンク用のカスタムヘッダーを追加できます。事前にメールボックスまたはリンクを準備します。ヘッダーを追加する方法を、次の Python の例に示します: msg['List-Unsubscribe'] = '<mailto:unsubscribe@example.com>,<https://example.com/unsubscribe>'

このカスタムヘッダーは、システムのデフォルトのサブスクライブ解除リンクを上書きします。`X-AliDM-Settings` ヘッダーを含める必要はありません。

詳細については、「専用 IP」をご参照ください。