簡體   English   中英

使用 SendGrid v3 發送電子郵件批處理

[英]Sending an email batch with SendGrid v3

我有一個用例,其中我有 1000 封電子郵件,正文已准備好(它們已准備好按原樣發送),一封從電子郵件地址發送的郵件,1000 個收件人。 我在 C# 中使用 SendGrid API v3。 我試圖弄清楚如何將它們批量發送到 SendGrid API。 這是我的代碼:

 private async Task SendBatchEmails(DataRowCollection emailDataRows)
        {
            var WriteToDatabaseCollection = new Dictionary<Guid, string>();
            var emailObjectCollection = new List<SendGridMessage>();

            foreach (DataRow emailDataRow in emailDataRows)
            {
                var emailObject = new SendGridMessage();

                var to = (new EmailAddress(emailDataRow["RecipientEmailAddress"] + "", emailDataRow["RecipientName"] + ""));
                var from = new EmailAddress(emailDataRow["SenderEmailAddress"] + "", emailDataRow["SenderName"] + "");
                var subject = emailDataRow["Subject"] + "";
                var text = emailDataRow["MessageBody"] + "";
                var html = $"<strong>{emailDataRow["MessageBody"] + "" }</strong>";

                var msg = MailHelper.CreateSingleEmail(from, to, subject, text, html);
                emailObjectCollection.Add(msg);

            }

            await emailClient.SendBatchEmailsEmailAsync(emailObjectCollection);


            dataContext.UpdateEmailResult(WriteToDatabaseCollection);
        } 


    public async Task SendBatchEmailsEmailAsync(List<SendGridMessage> messages)
    {
        return await client.????(messages);
    }

客戶端是一個 SendGridClient,我唯一的選擇是:SendEmailAsync(msg)

如何發送一批 sendgrid 消息?

Twilio SendGrid 開發人員布道者在這里。

對於具有不同正文的電子郵件,沒有批量電子郵件發送。 盡管您可以將相同的正文發送到多個地址。

要發送 1000 封電子郵件,您需要遍歷消息列表並在每條消息中調用一次 API。

如果您要發送的任何電子郵件與其他電子郵件具有相同的正文(您不能像其他答案中提到的那樣批量發送具有不同內容的電子郵件),您可以按正文對它們進行分組,然后分塊發送。 SendGridClient 一次最多需要 1000 個,因此您還需要檢查它。 像這樣:

public class Email
{
    string Content { get; }
    string Address { get; }
}

您用於分組、分塊和批量發送電子郵件的代碼(其中電子郵件是電子郵件對象的集合)如下所示:

var client = new SendGridClient("123456APIKEY");
var senderEmail = "someEmail";
var groupedByContent = emails.GroupBy(x => x.Content, x => x.Address);

foreach(var group in groupedByContent)
foreach(var recipientsBatch in group.Chunk(1000))
{
    var message = new SendGridMessage();
    // This extra index is needed to create separate personalizations, if you don't want recipients to see each others email
    for (var i = 0; i < recipientsBatch.Length; i++)
        message.AddTo(new EmailAddress { Email = recipientsBatch[i] }, i);
    message.PlainTextContent = group.Key;
    message.SetFrom(senderEmail);
    var response = await client.SendEmailAsync(message);
    // response processing code ...     
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM