2010-08-05 126 views
3

我有一個解決方案,在用戶忘記密碼時檢索用戶密碼。我做了很好的代碼,但是出現了一個SMTP異常(發送錯誤)的錯誤。我該如何解決這個問題?發送電子郵件時出錯

protected void Button1_Click(object sender, EventArgs e) 
{ 
    using (SqlConnection con = Connection.GetConnection()) 
    { 
     string sql = "Select Password From Registeration Where [email protected] And [email protected]"; 
     SqlCommand com = new SqlCommand(sql, con); 
     com.CommandType = CommandType.Text; 

     com.Parameters.Add("@UserName", SqlDbType.NVarChar, 50).Value = TxtUserName.Text; 
     com.Parameters.Add("@Email", SqlDbType.NVarChar, 50).Value = TxtEmail.Text; 
     SqlDataReader dr = com.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection); 
     while (dr.Read()) 
     { 
      SendMail("[email protected]", "xxxx", TxtEmail.Text, " Hi", "Hi" + dr["Password"].ToString()); 
     } 
     Response.Redirect(""); 
    } 
} 


public static bool SendMail(string elarabyAccount, string password, string to, string subject, string message) 
{ 
    try 
    { 
     NetworkCredential loginInfo = new NetworkCredential(elarabyAccount, password); 
     MailMessage msg = new MailMessage(); 
     msg.From = new MailAddress(elarabyAccount); 
     msg.To.Add(new MailAddress(to)); 
     msg.Subject = subject; 
     msg.Body = message; 
     msg.IsBodyHtml = true; 
     SmtpClient client = new SmtpClient("smtp.elarabygroup.com", 8080); 
     client.EnableSsl = true; 
     client.UseDefaultCredentials = false; 
     client.Credentials = loginInfo; 
     client.Send(msg); 

     return true; 
    } 
    catch (Exception) 
    { 
     return false; 
    } 
} 
+2

如何發佈錯誤/異常詳細信息? – Oded 2010-08-05 07:48:38

+0

順便提一下,我無法解析'smtp.elarabygroup.com'。該主機是否可以從您用於測試的機器上獲得?它應該讀取「mail.elarabygroup.com」而不是? – sarnold 2010-08-05 07:54:13

+0

我在我的公司網絡上工作,並通過outlook或mail.elarabygroup.com登錄到我的電子郵件 – Myworld 2010-08-05 08:04:56

回答

1

documentation for SmtpClass狀態下述(重點煤礦):

由SmtpClient 類到SMTP服務器的 當前實例建立可以是該連接 如果應用程序希望重新使用到 發送多個郵件到同一個 SMTP服務器。 當使用身份驗證或加密建立到SMTP服務器的連接時,這特別有用。

由於您使用的加密(client.EnableSsl = true;),你應該儘量使用單一SmtpClient實例發送您的郵件。

而且,通過對SendMail每次調用創建的SmtpClient一個新實例,你創建的SMTP服務器的新連接;根據您擁有的記錄數量以及您要發送的電子郵件數量,SMTP服務器有可能因爲數量太高而拒絕接受任何來自您的連接,因爲它可能認爲您要麼發出DDoS攻擊,或者你正在嘗試做其他惡意的事情。

如上所述,只需嘗試使用單個SmtpClient實例即可。

另一個可能的問題可能是SmtpClient未通過發出QUIT命令而正確退出連接。 This is a known bug,並在Microsoft .NET Framework 4中修復。

相關問題