我在Across an Human Resource公司工作,我们正在为我们的年轻专业人员部门建立一个新系统。该应用程序需要为所有注册用户发送大量不同的邮件(更新简历,丢失密码,事件,测试等),我有一个架构问题/问题。
该系统将在一天内发送几组电子邮件,每组可能会有大约30k,我们相信系统每天会发送超过10组。
我的第一个想法是创建一个Windows服务来处理我的电子邮件表(SQL)中的所有电子邮件组,但我会遇到可用性和单点故障的问题。
我只是担心这一点,因为我的队列需要几个小时来发送所有组(每个邮件连续单独)。
有人知道像twitter / facebook / instragram这样大的系统会发送多少邮件吗?我很关心基础设施和发展。
顺便说一下,我正在使用smtpClient.Send()而我没有使用smtpClient.SendAsync(),因为我无法维护和控制它。
我对从基础设施到开发方的任何消息都持开放态度。所有基础设施都依赖于AWS Datacenter(SES)或Microsoft Azure,我们的infra团队正在测试它们。
答案 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从默认值,具体取决于你要传递的硬件能力,你可以使用调用此函数的单独线程或异步发送,具体取决于你如何构建你的其余部分应用程序,或者如果您的偏好符合要求,您可以将超时设置为最佳值。