SMTP通過(guò)配置項(xiàng)郵件頭控制指定功能
本文中含有需要您注意的重要提示信息,忽略該信息可能對(duì)您的業(yè)務(wù)造成影響,請(qǐng)務(wù)必仔細(xì)閱讀。
如果配置項(xiàng)的值設(shè)置不正確,發(fā)信會(huì)報(bào)錯(cuò),請(qǐng)務(wù)必經(jīng)過(guò)測(cè)試后再發(fā)布到生產(chǎn)環(huán)境。
郵件推送目前允許用戶(hù)通過(guò)郵件頭X-AliDM-Settings來(lái)控制特定功能。
X-AliDM-Settings 大小寫(xiě)敏感,建議復(fù)制使用。
示例:本次發(fā)信采用默認(rèn)策略(對(duì)批量類(lèi)型的發(fā)信地址發(fā)給特定域名時(shí))會(huì)生成退訂鏈接,退訂過(guò)濾級(jí)別是發(fā)信域名級(jí)別。
先按照如下格式組一個(gè)json字符串
{"Version": "1.0", "Unsubscribe": {"LinkType": "default", "FilterLevel": "mailfrom_domain"}}
對(duì)json字符串做base64編碼
eyJWZXJzaW9uIjogIjEuMCIsICJVbnN1YnNjcmliZSI6IHsiTGlua1R5cGUiOiAiZGVmYXVsdCIsICJGaWx0ZXJMZXZlbCI6ICJtYWlsZnJvbV9kb21haW4ifX0=
編碼值寫(xiě)入為郵件頭X-AliDM-Settings的值。發(fā)送出郵件后,可以查看郵件頭X-AliDM-Settings是否設(shè)置成功。
X-AliDM-Settings: eyJWZXJzaW9uIjogIjEuMCIsICJVbnN1YnNjcmliZSI6IHsiTGlua1R5cGUiOiAiZGVmYXVsdCIsICJGaWx0ZXJMZXZlbCI6ICJtYWlsZnJvbV9kb21haW4ifX0=
用Java代碼來(lái)表示如下:
import com.alibaba.fastjson.JSON;
import org.apache.commons.codec.binary.Base64;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.HashMap;
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"), // 不填寫(xiě)退訂link
DEFAULT("default"), // 默認(rèn)策略,對(duì)于到谷歌和yahoo的營(yíng)銷(xiāo)地址,啟用en_US類(lèi)型退訂鏈接埋點(diǎn)
ZH_CN("zh-cn"), // 中文(簡(jiǎn)體)
EN_US("en-us"); // 英語(yǔ)(美國(guó)),默認(rèn)
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;
public AliDMSetting(UnsubLinkType unsubLinkType, UnsubFilterLevel unsubFilterLevel) {
this.unsubLinkType = unsubLinkType;
this.unsubFilterLevel = unsubFilterLevel;
}
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);
return new String( Base64.encodeBase64(JSON.toJSONString(setting).getBytes()) );
}
public void generateHeader(MimeMessage message) throws MessagingException {
message.addHeader(X_ALIDM_SETTING_HEADER_KEY, generateHeaderValue());
}
}
python示例:
import json
import base64
#退訂邏輯
Unsubscribe_json ={
"Version":"1.0",
"Unsubscribe":{
#請(qǐng)根據(jù)具體需求選擇參數(shù)
# "LinkType": "disabled",
"LinkType": "default",
# "LinkType": "zh-cn",
# "LinkType": "en-us",
# "FilterLevel": "disabled",
# "FilterLevel": "default",
# "FilterLevel": "mailfrom",
"FilterLevel": "mailfrom_domain"# ,
# "FilterLevel": "edm_id"
}
}
Unsubscribe_jsonTrace = json.dumps(Unsubscribe_json)
Unsubscribe_base64Trace = str(base64.b64encode(Unsubscribe_jsonTrace.encode('utf-8')), 'utf-8')
# print(base64Trace)
msg.add_header("X-AliDM-Settings", Unsubscribe_base64Trace)
#退訂邏輯
目前已經(jīng)支持的功能項(xiàng)如下表
功能點(diǎn) | 配置項(xiàng)一級(jí)key | 配置項(xiàng)二級(jí)key | 配置項(xiàng)描述 |
退訂功能 | Unsubscribe | LinkType | 生成的退訂鏈接類(lèi)型。參照退訂功能生成鏈接和過(guò)濾機(jī)制文檔 disabled 不生成 default 采用默認(rèn)策略:對(duì)批量類(lèi)型的發(fā)信地址發(fā)給特定域名時(shí)會(huì)生成退訂鏈接,如帶有關(guān)鍵字"gmail", "yahoo", "google", "aol.com", "hotmail", "outlook", "ymail.com"等 zh-cn 生成,給將來(lái)埋點(diǎn)到內(nèi)容準(zhǔn)備 en-us 生成,給將來(lái)埋點(diǎn)到內(nèi)容準(zhǔn)備 |
FilterLevel | 過(guò)濾級(jí)別。參照退訂功能生成鏈接和過(guò)濾機(jī)制文檔 disabled 不過(guò)濾 default 采用默認(rèn)策略,批量地址采用發(fā)信地址級(jí)別過(guò)濾 mailfrom 發(fā)信地址級(jí)別過(guò)濾 mailfrom_domain 發(fā)信域名級(jí)別過(guò)濾 edm_id 賬號(hào)級(jí)別過(guò)濾 |
收件人收到的郵件頭示例:
以下示例做了脫敏處理,請(qǐng)前往收件箱下載或查看測(cè)試郵件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>
是否顯示退訂按鈕由收信方的策略決定,部分服務(wù)商只有發(fā)信地址或域名信譽(yù)達(dá)到要求才會(huì)顯示退訂按鈕,建議登錄收信方郵箱進(jìn)行效果測(cè)試。
若還未正常顯示,也可以使用下面命令對(duì)生成的鏈接進(jìn)行測(cè)試。
linux測(cè)試命令:
以下示例做了脫敏處理,請(qǐng)前往收件箱下載或查看測(cè)試郵件eml文件,獲取郵件頭中的退訂鏈接。
curl -X POST "http://dm-cn.aliyuncs.com/trace/v1/unsubscribe?lang=zh-cn&sign=cd03d4d252bxxxxxxxx0d99c&token=eyJjYW1wYWlnbl90aW1lIjoxNzA2MjU3NjxxxxxxxxxxxxxxxxjAzNTUxNDMiLCJtYWlsX2Zyb20iOiJ6azFAdDEuemtkbS54eXoiLCJtYWlsX3RvIjoiemsxQHprZG0ueHl6In0%3D&version=1.0"
或
curl -X POST -d "lang=zh-cn&sign=cd03d4d252bxxxxxxxx0d99c&token=eyJjYW1wYWlnbl90aW1lIjoxNzA2MjU3NjxxxxxxxxxxxxxxxxjAzNTUxNDMiLCJtYWlsX2Zyb20iOiJ6azFAdDEuemtkbS54eXoiLCJtYWlsX3RvIjoiemsxQHprZG0ueHl6In0%3D&version=1.0" "http://dm-cn.aliyuncs.com/trace/v1/unsubscribe"
效果展示: