簡體   English   中英

如何加快電子郵件的發送速度?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM