You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用SendGrid API v3在C#中批量发送1000封预制邮件?

解决SendGrid API v3在C#中批量发送邮件的问题

你现在的思路是创建1000个独立的SendGridMessage然后批量发送,但其实SendGrid的C# SDK有更高效的批量实现方式,这里提供两种适配你场景的方案:


方案1:使用单个SendGridMessage + 多Personalizations(推荐,单API请求)

SendGrid API允许在单个请求中通过Personalizations字段添加最多1000个收件人(刚好匹配你的需求),每个收件人可以配置独立的内容、主题等。这种方式比发送1000次单请求高效得多,还能避免触发API限流。

修改你的代码如下:

private async Task SendBatchEmails(DataRowCollection emailDataRows) 
{ 
    var WriteToDatabaseCollection = new Dictionary<Guid, string>(); 
    // 创建单个批量邮件实例
    var bulkMsg = new SendGridMessage(); 
    // 统一设置发件人(所有邮件发件人一致时)
    var from = new EmailAddress(emailDataRows[0]["SenderEmailAddress"] + "", emailDataRows[0]["SenderName"] + "");
    bulkMsg.From = from;

    foreach (DataRow emailDataRow in emailDataRows) 
    { 
        // 为每个收件人创建专属的个性化配置
        var personalization = new Personalization();
        var to = new EmailAddress(emailDataRow["RecipientEmailAddress"] + "", emailDataRow["RecipientName"] + "");
        personalization.Tos.Add(to);
        // 设置该收件人的邮件主题
        personalization.Subject = emailDataRow["Subject"] + "";
        // 添加该收件人的文本和HTML内容
        personalization.Content.Add(new Content("text/plain", emailDataRow["MessageBody"] + ""));
        personalization.Content.Add(new Content("text/html", $"<strong>{emailDataRow["MessageBody"] + "" }</strong>"));

        // 将个性化配置加入批量邮件
        bulkMsg.Personalizations.Add(personalization);
    } 

    // 仅需调用一次发送接口,即可完成1000封邮件的批量投递
    await emailClient.SendEmailAsync(bulkMsg); 
    dataContext.UpdateEmailResult(WriteToDatabaseCollection); 
} 

如果你的邮件存在发件人不同的场景,也可以在每个Personalization实例中单独设置From(注意发件人邮箱必须在SendGrid控制台完成验证)。


方案2:使用SendEmailsAsync发送多个SendGridMessage(多请求批量)

如果你坚持要创建1000个独立的SendGridMessage,SendGrid C# SDK(v9及以上版本)提供了SendEmailsAsync方法,可接收IEnumerable<SendGridMessage>参数批量处理请求(本质是拆分多个API请求,效率略低于方案1)。

修改你的批量发送方法:

public async Task SendBatchEmailsEmailAsync(List<SendGridMessage> messages) 
{ 
    // 调用批量发送接口
    await client.SendEmailsAsync(messages); 
}

⚠️ 注意:SendGrid对API请求频率有限制,一次性发送1000个独立消息可能触发限流,建议拆分批次(比如每次发100个,间隔数秒)后再发送。


额外注意事项

  • 收件人上限:方案1的单个请求最多支持1000个Personalizations,刚好适配你的需求;若后续需求超过1000,需拆分多个请求。
  • 发件人验证:确保发件人邮箱已在SendGrid控制台完成验证,否则邮件易被退回或进入垃圾邮件。
  • 状态跟踪:若需追踪每封邮件的发送状态,可在SendGridMessage中设置BatchId,后续通过SendGrid的Webhook或API查询批次状态。

内容的提问来源于stack exchange,提问作者Ronald Herhuth

火山引擎 最新活动