我使用 C# 控制台应用程序发送个性化的批量电子邮件,但我发现了瓶颈,如果我使用顺序编程,我每秒只能发送 1 封电子邮件。我尝试创建一个多线程应用程序,但我每秒只能发送两封电子邮件。
我怎样才能做得更好?
这是代码片段:
公共静态空 主程序(列出电子邮件,字符串cuerpo_email_en,字符串cuerpo_email_es) {
//emails list is populated with 50.000 emails
DateTime timeControllerForSendingEmails = DateTime.Now;
while (emails.Count > 0)
{
if ((DateTime.Now - timeControllerForSendingEmails).TotalSeconds >= 1)
{
timeControllerForSendingEmails = DateTime.Now;
//this method gets a list of 60 emails and remove them from the main list
List<EmailEnt> queuedEmails = GetEmailsQueue(emails, 60));
Send(queuedEmails);
}
}
}
public void Send(List<EmailEnt> queuedEmails)
{
IList<Task> tasks = new List<Task>();
List<string> logLines = new List<string>();
foreach (EmailEnt emailEnt in queuedEmails)
{
string subject = "Hello {name}";
string body = "im the body;
tasks.Add(Task.Factory.StartNew(() =>
{
SendEmail(emailEnt, subject, body);
}));
}
Task.WaitAll(tasks.ToArray());
}
您是否仍在"沙盒模式"中运行?根据AWS的说法:
当您在沙盒中时,您的发送配额为每封 200 条消息 24 小时期限,您的最大发送速率为每条消息一条 第二。要提高发送限制,您需要请求 生产访问。有关更多信息,请参阅请求生产 访问 Amazon SES。请求生产访问权限并开始后 发送电子邮件,您可以通过以下方式进一步提高发送限制 按照增加您的 Amazon SES 发送中的指导进行操作 限制部分。
如果没有,我使用类似于下面的代码第二次发送 15+ 封电子邮件(不在 SES 上),并且它工作正常:
Parallel.ForEach(mailQueue, new ParallelOptions() {MaxDegreeOfParallelism = 7}, itm=>SendEmail(itm));
这可能在功能上等同于您已经在做的事情,但我可以肯定地说它确实提供了更大的吞吐量,可能值得一试。