[英]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.