我正在使用邮枪向客户列表发送付款提醒。
我最初的解决方案是使用他们的RESTAPI向一组收件人发送电子邮件(批量发送)大概是这样的:
public static bool SendBatch(string From, Dictionary<string, Object> vars, string txtEmail, string htmlEmail)
{
RestClient client = new RestClient();
client.BaseUrl = "https://api.mailgun.net/v2";
client.Authenticator =
new HttpBasicAuthenticator("api",
"my-mailgun-key");
RestRequest request = new RestRequest();
request.AddParameter("domain", "my-domain.tld.mailgun.org", ParameterType.UrlSegment);
request.Resource = "{domain}/messages";
request.AddParameter("from", From);
foreach (KeyValuePair<string, Object> entry in vars)
{
request.AddParameter("to", entry.Key);
}
request.AddParameter("subject", "Payment option ready");
request.AddParameter("text", txtEmail);
request.AddParameter("html", htmlEmail);
request.AddParameter("recipient-variables", vars.ToJSON());
request.Method = Method.POST;
client.Execute(request);
return true;
}
(有关ToJSON()自定义扩展,请参阅本文)
这很有效。但是,现在我想跟踪打开的窗口。文档中说,使用webhook(一个简单的网页,当用户打开电子邮件时可以获取POST数据),我可以获得有关此操作的大量信息,包括一些很酷的数据,如地理位置。
有两个似乎很有希望的值:标记和自定义变量。但是,这两个值都将在创建请求时包括在内,但在批量发送中,这些值不起作用(它们将标识批量发送本身,而不是单个电子邮件)
是否有任何方法可以使用Mailgun API将标识变量添加到一批发送的每封电子邮件中?我已经求助于发送个人电子邮件,但如果我必须向一个大名单发送电子邮件,那将非常不方便。
此问题的解决方案是使用自定义变量参数(v:
)稍后可以通过设置webhook来捕获这些内容。在我的例子中,webhook中的cupon id
POST参数将包含cupon
自定义变量的值。
request.AddParameter("recipient-variables", vars.ToJSON());
request.AddParameter("v:cupon-id", "{cupon:\"%recipient.cupon%\"}");
request.AddParameter("o:tracking", true);
注意,根据文档,这些自定义变量必须是JSON字符串。