[英]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.