使用c#每天发送200k邮件的好方法

时间:2014-09-19 20:16:11

标签: c#-4.0 architecture smtp

我在Across an Human Resource公司工作,我们正在为我们的年轻专业人员部门建立一个新系统。该应用程序需要为所有注册用户发送大量不同的邮件(更新简历,丢失密码,事件,测试等),我有一个架构问题/问题。

该系统将在一天内发送几组电子邮件,每组可能会有大约30k,我们相信系统每天会发送超过10组。

我的第一个想法是创建一个Windows服务来处理我的电子邮件表(SQL)中的所有电子邮件组,但我会遇到可用性和单点故障的问题。

我只是担心这一点,因为我的队列需要几个小时来发送所有组(每个邮件连续单独)。

有人知道像twitter / facebook / instragram这样大的系统会发送多少邮件吗?我很关心基础设施和发展。

顺便说一下,我正在使用smtpClient.Send()而我没有使用smtpClient.SendAsync(),因为我无法维护和控制它。

我对从基础设施到开发方的任何消息都持开放态度。所有基础设施都依赖于AWS​​ Datacenter(SES)或Microsoft Azure,我们的infra团队正在测试它们。

1 个答案:

答案 0 :(得分:0)

这适用于我们发送批量电子邮件:

public void sendEmail(String email, PdfDocument attachFile)
    {
        attachFile.Save("attachment.pdf");
        attachFile.Close();
        SmtpClient mSmtpClient = new SmtpClient("smtp.domain.com", 25);
        mSmtpClient.EnableSsl = true;
        mSmtpClient.Credentials = new System.Net.NetworkCredential("user", "pass");
        MailAddress from = new MailAddress("address@domain.com", String.Empty, System.Text.Encoding.UTF8);
        MailAddress to = new MailAddress(email.ToString());
        MailMessage mMailMessage = new MailMessage(from, to);
        System.Net.Mail.Attachment at = new System.Net.Mail.Attachment("Payroll Direct Deposit Notification.pdf");
        mMailMessage.Body = "Please see attached for your pay summary.";
        mMailMessage.BodyEncoding = System.Text.Encoding.UTF8;
        mMailMessage.Subject = "subject";
        mMailMessage.SubjectEncoding = System.Text.Encoding.UTF8;
        mMailMessage.Attachments.Add(at);
        try
        {
            mSmtpClient.Send(mMailMessage);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        at.Dispose();
        attachFile.Dispose();
    }

你可能想要调整mSmtpClient.Timeout从默认值,具体取决于你要传递的硬件能力,你可以使用调用此函数的单独线程或异步发送,具体取决于你如何构建你的其余部分应用程序,或者如果您的偏好符合要求,您可以将超时设置为最佳值。