Configure los enlaces de cancelación de suscripción y la configuración de IP dedicada para Direct Mail mediante el encabezado de mensaje SMTP X-AliDM-Settings.
Una configuración incorrecta provoca errores en la entrega de correos electrónicos. Pruebe siempre su configuración antes de implementarla en producción.
El encabezado de mensaje X-AliDM-Settings controla las funciones de cancelación de suscripción e IP dedicada.
X-AliDM-Settings distingue entre mayúsculas y minúsculas. Copie y pegue el encabezado para evitar errores.
A continuación se muestra un ejemplo que genera un enlace de cancelación de suscripción filtrado a nivel de dominio de correo electrónico para direcciones de remitente por lotes.
Cree una cadena JSON con el siguiente formato.
{"Version":"1.0","Unsubscribe":{"FilterLevel":"mailfrom_domain","LinkType":"zh-cn"},"OutboundIp":{"IpPoolId":"xxx"}}
Codifique la cadena JSON en Base64.
eyJWZXJzaW9uIjoiMS4wIiwiVW5zdWJzY3JpYmUiOnsiRmlsdGVyTGV2ZWwiOiJtYWlsZnJvbV9kb21haW4iLCJMaW5rVHlwZSI6InpoLWNuIn0sIk91dGJvdW5kSXAiOnsiSXBQb29sSWQiOiJ4eHgifX0=
Establezca la cadena codificada como valor del encabezado X-AliDM-Settings. Compruebe el encabezado en el mensaje recibido después del envío.
X-AliDM-Settings: eyJWZXJzaW9uIjoiMS4wIiwiVW5zdWJzY3JpYmUiOnsiRmlsdGVyTGV2ZWwiOiJtYWlsZnJvbV9kb21haW4iLCJMaW5rVHlwZSI6InpoLWNuIn0sIk91dGJvdW5kSXAiOnsiSXBQb29sSWQiOiJ4eHgifX0=
Ejemplo en Python: msg.add_header("X-AliDM-Settings", Create_base64Trace)
Genere el valor de X-AliDM-Settings en otros lenguajes:
import json
import base64
# Unsubscribe logic
Create_json = {
"Version" : "1.0",
"Unsubscribe" : {
# Select parameters as needed.
# "LinkType": "disabled", # Do not generate an unsubscribe message header.
"LinkType": "default", # Default policy, which enables instrumentation for en-us unsubscribe links.
# "FilterLevel": "disabled", # Do not filter.
# "FilterLevel": "default", # Default policy, which filters batch addresses at the sender address level.
# "FilterLevel": "mailfrom", # Filter at the sender address level.
"FilterLevel": "mailfrom_domain" # Filter at the email domain level.
# "FilterLevel": "edm_id" # Filter at the account level.
},
"OutboundIp" : {
"IpPoolId" : "exxxxxxe-4xx0-4xx3-8xxa-7xxxxxxxxxxxxf" # If needed, purchase a dedicated IP address in the Direct Mail console and obtain the IP pool 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)
# Unsubscribe logicimport 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", // Default policy, which enables instrumentation for en-us unsubscribe links.
"FilterLevel": "mailfrom_domain" // Filter at the email domain level.
},
"OutboundIp": {
"IpPoolId": "exxxxxxe-4xx0-4xx3-8xxa-7xxxxxxxxxxxxf" // If needed, purchase a dedicated IP address in the Direct Mail console and obtain the IP pool ID.
}
}
""";
JsonElement jsonElement = JsonParser.parseString(jsonContent);
String compactJson = new Gson().toJson(jsonElement);
return Base64.getEncoder()
.encodeToString(compactJson.getBytes(StandardCharsets.UTF_8));
}// Build the JSON.
$createJson = [
"Version" => "1.0",
"Unsubscribe" => [
"LinkType" => "default", // Default policy.
"FilterLevel" => "mailfrom_domain" // Filter at the email domain level.
],
"OutboundIp" => [
"IpPoolId" => "exxxxxxe-4xx0-4xx3-8xxa-7xxxxxxxxxxxxf" // Replace with your IP pool ID.
]
];
// Convert to a JSON string.
$jsonString = json_encode($createJson, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
// Base64 encode.
$base64Trace = base64_encode($jsonString);
// Add a custom message header.
$mail->addCustomHeader('X-AliDM-Settings', $base64Trace);Segundo ejemplo en Java:
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"), // Do not add an unsubscribe link.
DEFAULT("default"), // Default policy. For marketing emails sent to Google and Yahoo addresses, enable instrumentation for en_US unsubscribe links.
ZH_CN("zh-cn"), // Chinese (Simplified)
EN_US("en-us"); // English (US), default
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());
}
}
Funciones compatibles:
|
Función |
Clave de primer nivel |
Clave de segundo nivel |
Descripción |
|
Función de cancelación de suscripción |
Unsubscribe |
LinkType |
Tipo de enlace de cancelación de suscripción que se generará.
|
|
FilterLevel |
Nivel de filtrado.
|
||
|
Función de IP dedicada |
OutboundIp |
IpPoolId |
ID del pool de IP dedicada. Enruta los correos electrónicos salientes a través de la dirección IP dedicada adquirida. |
Ejemplo de encabezado recibido por el destinatario:
El siguiente ejemplo está redactado. Descargue o consulte el archivo .eml para ver el enlace real de cancelación de suscripción.
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>
El encabezado List-Unsubscribe-Post: List-Unsubscribe=One-Click habilita la cancelación de suscripción con un solo clic:
Con este encabezado, la acción de cancelación de suscripción se completa mediante HTTP POST sin confirmación del usuario.
Sin este encabezado o con un valor no estándar, el proceso de cancelación de suscripción puede recurrir a
mailto:o a la redirección de enlaces, lo cual requiere confirmación manual.La aparición del botón depende del proveedor de correo electrónico del destinatario. Algunos proveedores exigen una buena reputación de la dirección de remitente o del dominio. Inicie sesión en el buzón del destinatario para comprobarlo.
Si el botón no aparece, pruebe el enlace generado con el siguiente comando.
Comando de prueba en Linux:
El siguiente ejemplo está redactado. Descargue o consulte el archivo .eml para ver el enlace real de cancelación de suscripción.
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"
Resultado del ejemplo:
