[英]How to speed up sending of e-mails?
我需要向不同的人发送不同的电子邮件。 每个收件人都会生成不同的电子邮件正文,然后调用以下方法。 也就是说,如果有10个收件人,则以下方法被调用10次:
public int Send_Mail(string send_from_bc, string send_to_bc, string subject_bc, string body_bc)
{
try
{
int count_returned = 0;
var send_from = new MailAddress(send_from_bc, "The Admin");
var send_to = new MailAddress(send_to_bc);
string subject = subject_bc;
string body = body_bc;
var smtp = new SmtpClient
{
Host = "**my smtp host**",
Port = 25,
DeliveryMethod = SmtpDeliveryMethod.Network,
Timeout = 300000
};
using (var message = new MailMessage(send_from, send_to)
{
Subject = subject,
Body = body
})
{
message.IsBodyHtml = true;
smtp.Send(message);
count_returned += 1;
}
return count_returned;
}
catch (Exception ex)
{
throw new Exception("Exception caught in Send_Mail", ex);
}
}
问题在于,即使发送几封邮件(例如10或15封邮件)也要花费大量时间。 发送一封邮件大约需要2-5分钟。 现在,我确实相信部分提供给我的SMTP主机有问题。 但是我该怎么做才能加快速度呢?
另外,有什么方法可以实现:现在,用户单击一个按钮,然后说,要发送两封邮件,他/她必须等待2-5分钟(有时甚至更多),然后返回控制权和值标签的名称更改为“已发送电子邮件”。 是否可以做一些事情,使用户只需单击按钮,并开始发送电子邮件,然后他/她就可以关闭窗口并继续工作了?
我现在处于关键阶段,我们将不胜感激。
首先,不要让用户等待此操作。 如果您必须等待2-5分钟,则会话很可能会超时。 而是使此操作成为在后台运行的异步任务。
然后,我考虑弹出一条通知,指出稍后已将电子邮件发送给用户,而不是强迫他们等待。
10入门-将您发送的电子邮件代码移到单独的类中:
public class EmailSender
{
public EmailSender(/* Parameters required, e.g. list of emails */)
{ }
public void SendEmails()
{
// Long running task
}
}
然后在您的页面中说一个按钮被单击:
protected void btn_SendEmails_Clicked(object sender, EventArgs e)
{
EmailSender emailSender = new EmailSender(/* Any setup code required */);
ThreadPool.QueueUserWorkItem(emails => emailSender.SendEmails());
}
要处理回发给用户的通知,您需要在电子邮件结束后引发一个事件,并可能使用SignalR之类的东西来警告浏览器。
请注意,我没有尝试编译此代码,但应该给您大致的思路。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.