2013-12-09 37 views
0

我有一個應用程序通過SMTP發送電子郵件,但它比罪惡更慢。兩名收件人可能需要20秒以上。我相信問題是程序邏輯。使用SMTP優化發送消息

該程序打開一個帶有電子郵件地址和顯示名稱的csv,然後使用for循環向每個收件人發送消息。

問題是,我擔心它每次發送給列表中的下一個人時都會重新建立SMTP連接。

我的問題是,如何設置SMTP連接併爲每個用戶重新使用該連接? (除非這不是爲什麼它的速度慢,有人能告訴我,爲什麼它的運行這麼慢)

void DoWork(object sender, DoWorkEventArgs e) 
    { 
     // Get User List 
     List<string[]> mycsv = csvRead(); 

     int total = mycsv.Count; 

     // Send Message to each user 
     for (int x = 0; x < total; x++) 
     { 
      //Actual send message 
      sendMail(mycsv[x][0], mycsv[x][1]); 
     } 

    } 


private void sendMail(string toEmail, string toName) 
    { 
     string email = Properties.SMTP.Default.Email; 
     string name = Properties.SMTP.Default.DisplayName; 

     MailMessage mail = new MailMessage(); 
     mail.From = new MailAddress(email, name); 

     //Recipient Address 
     mail.To.Add(new MailAddress(toEmail, toName)); 

     //Formatted mail 
     mail.IsBodyHtml = true; 
     // htmlMessage and Subject are global 
     mail.Body = htmlMessage; 
     mail.Subject = htmlSubject; 

     SmtpClient smtp = smtpDetails(); 
     smtp.Send(mail); 
    } 

private SmtpClient smtpDetails() 
    { 
     int port = Convert.ToInt32(Properties.SMTP.Default.ServerPort); 
     string email = Properties.SMTP.Default.Email; 
     string username = Properties.SMTP.Default.Username; 
     string password = Properties.SMTP.Default.Password; 
     string host = Properties.SMTP.Default.ServerAdd; 

     SmtpClient smtp = new SmtpClient(); 
     smtp.Port = port; 
     smtp.EnableSsl = true; 
     smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
     smtp.UseDefaultCredentials = false; 
     smtp.Credentials = new System.Net.NetworkCredential(username, password); 
     smtp.Host = host; 
     return smtp; 

    } 

VS:2013 - 4.5 .NET - WPF應用程序

回答

0

的一種方式,以提高速度可以使一個郵件傳遞的靜態類。例如。一個帶有靜態方法SendMail的郵件處理程序類(將您的smtpDetails()放入其中) 因此,不需要爲循環中的每個調用創建SmtpClient的新實例 - 只需重新使用靜態方法。

0

你也可以使用一個使用:

using(SmtpClient smtp = new SmtpClient()) 
{ 
     Port = port 
     //etc 
} 

這將處理所有的SMTP連接的