【问题标题】:Query SendGrid API based on Message ID根据 Message ID 查询 SendGrid API
【发布时间】:2019-11-14 10:35:19
【问题描述】:

所以我将使用 SendGrid 来提供我的电子邮件服务,当我发送电子邮件时,如果电子邮件成功排队,我的响应对象会创建一个 X-Message-Id。但是,这并不能解释退回的电子邮件。

static async Task SendEmail()
{
    var apiKey = ConfigurationManager.AppSettings["apiKey"];
    var client = new SendGridClient(apiKey);
    var from = new EmailAddress("test@example.com", "Example User");
    var subject = "Hello World from the Twilio SendGrid CSharp Library Helper!";
    var to = new EmailAddress("testUser@recipient.com", "Jeeno");
    var plainTextContent = "Hello, Email from the helper [SendSingleEmailAsync]!";
    var htmlContent = "<strong>Hello, Email from the helper! [SendSingleEmailAsync]</strong>";
    var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);

    var response = await client.SendEmailAsync(msg);
    Console.WriteLine(msg.Serialize());
    Console.WriteLine("============================================1");
    Console.WriteLine(response.StatusCode);
    Console.WriteLine("============================================2");
    Console.WriteLine(response.Headers);
    Console.WriteLine("============================================3");
    Console.WriteLine("\n\nPress <Enter> to continue.");
    Console.ReadLine();
}

我想创建一个计划任务,然后查询所有退回的电子邮件并根据该 ID 或任何 ID 将它们拉回。但是,当针对退回的电子邮件点击 sendgrip api 端点时,我只会得到一个带有时间戳、电子邮件字符串、原因字符串和状态字符串的响应对象。有没有办法根据Message Id查询?

static async Task Execute()
{
    var apiKey = ConfigurationManager.AppSettings["apiKey"];
    var client = new SendGridClient(apiKey);

    string queryParams = @"{
    }";
    var response = await client.RequestAsync(method: SendGridClient.Method.GET, urlPath: "/suppression/bounces", queryParams: queryParams);
    Console.WriteLine(response.StatusCode);
    Console.WriteLine(response.Body.ReadAsStringAsync().Result);
    Console.WriteLine(response.Headers.ToString());
    Console.ReadLine();
}

【问题讨论】:

    标签: c# sendgrid sendgrid-api-v3


    【解决方案1】:

    3 个选项:

    1. Subscribe to Webwook events SendGrid 将在其中发布消息的 api 返回事件。当您发送消息请求时,您可以包含 custom_args (apiV3) 或 unique_ids (apiV2) 以唯一标识您发送的电子邮件。 Webhook 响应将包含您的唯一 ID,因此您可以绑定原始电子邮件和生成的事件

    2. 如果 Webhook 对您来说有点太不可靠,您可以付费购买附加组件以使用 EmailActivity History Api。这将允许您查询另一个 Sendgrid API 以获取消息列表以及它们最后一次更新的时间,or get a message by MessageId or by your uniqueId as per (1)。我相信您可以获得长达 30 天的历史记录,因此如果您定期查询,您可以在数据从服务器消失之前将您的响应存储在本地。

    3. 发送电子邮件并检查响应标头中的 X-Message-ID 值。这是 Sendgrid 在将消息单独发送给每个收件人之前分配的值(然后生成一个“MessageId”或 sg_message_id)。然后,您可以使用 query=msg_id like "{X-Message-Id}%" 例如查询 EmailActivity History Api 以获取 /messages。 msg_id like "abc-123-def%"

    【讨论】:

    • Sarin,您能否为我提供使用 c# 选项 3 的完整代码。使用 query= msg_id 查询 EmailActivity History Api 以获取 /messages,例如“{X-Message-Id}%”,例如msg_id like "abc-123-def%"
    • 能否为我们提供 sendgrid webhook 事件的 C# 代码,以便我可以通过 X-Message-Id 跟踪我的电子邮件
    • @RaselAhmed 请参阅 SendGrid 网站以获取有关其 api 的帮助文档。关于从您的 C# 代码进行调用,您应该参考用于检查响应标头的特定 HTTP 组件的帮助文档。
    【解决方案2】:

    SendGrid 无法通过message_id 进行查询。在收据上提供,以便您可以将其与您通过Event Webhook 收到的事件相关联。

    【讨论】:

      【解决方案3】:

      这是一种方法,使用 LIKE 运算符

      curl --request GET \
        --url 'https://api.sendgrid.com/v3/messages?limit=1&query=msg_id%20LIKE%20%22MSG_ID%25%22' \
        --header 'authorization: Bearer <<YOUR_SENDGRID_API_KEY_HERE>>' \
        --data '{}'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-07
        • 1970-01-01
        • 1970-01-01
        • 2022-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-24
        相关资源
        最近更新 更多