使用Mailgun批量发送和单独的消息ID

时间:2013-10-18 14:30:29

标签: c# api batch-processing mailgun

我正在使用Mailgun向客户列表发送付款提醒。

我最初的解决方案是使用他们的REST API向一组收件人发送电子邮件(batch sending。)这样的事情:

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()自定义扩展程序,请参阅this blog post

这很有效。但是,现在我想跟踪打开。 documentation表示使用webhook(一个简单的网页,当用户打开电子邮件时获取POST数据)我可以获得有关此操作的大量信息,包括一些很酷的数据,如地理位置。

有两个看似有希望的值:标记自定义变量。但是,这两个值都将在创建请求时包含在内,但在批量发送时这些值不起作用(它们将识别批次发送自身,而不是单个电子邮件。)

有没有办法使用Mailgun API为一批发送中的每封电子邮件添加标识变量?我已经使用发送个人电子邮件,但如果我必须将电子邮件发送到一个大清单,这非常不方便。

1 个答案:

答案 0 :(得分:4)

此问题的解决方案是使用自定义变量参数(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字符串according to the documentation