Amazon SES - 使用 C# 控制台应用程序每秒发送高配额的个性化电子邮件



我使用 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));

这可能在功能上等同于您已经在做的事情,但我可以肯定地说它确实提供了更大的吞吐量,可能值得一试。

相关内容

  • 没有找到相关文章

最新更新