2010-08-05 7 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

+0

Кстати, я не могу разрешить 'smtp.elarabygroup.com'. Этот хост доступен на машине, которую вы используете для тестирования? Должен ли он читать 'mail.elarabygroup.com' вместо этого? – sarnold

+0

Я работаю в сети своей компании, и я регистрируюсь на своем электронном письме по почте или по электронной почте.elarabygroup.com – Myworld

ответ

1

The documentation for SmtpClass утверждает следующее (курсив мой):

Соединение, установленное в текущего экземпляра класса SmtpClient на сервер SMTP может быть повторно использоваться, если пожелания приложения до отправить несколько сообщений на тот же SMTP-сервер. Это особенно полезно, когда используются аутентификация или шифрование, устанавливают соединение с SMTP-сервером.

Поскольку вы используете шифрование (client.EnableSsl = true;) вы должны попытаться использовать один SmtpClient экземпляр для отправки почты.

Кроме того, создав новый экземпляр SmtpClient при каждом вызове SendMail, вы создаете новое подключение к SMTP-серверу; в зависимости от количества записей, которые вы имеете, и, следовательно, количества писем, которые вы хотите отправить, возможно, что SMTP-сервер отказывается принимать какие-либо соединения от вас из-за большого количества, так как может показаться, что вы либо DDoS-атака или вы пытаетесь делать другие вредоносные вещи.

Как уже упоминалось выше, попробуйте использовать только один экземпляр SmtpClient.

Другой возможной проблемой может быть то, что SmtpClient не прекращает соединение правильно, не выдавая команду QUIT. This is a known bug и исправлена ​​в Microsoft .NET Framework 4.

Смежные вопросы