当用户忘记密码时,我有一个解决方案来检索用户密码。我做的代码很好,但错误出现了SMTP异常(发送错误)。我该如何解决这个问题?
protected void Button1_Click(object sender, EventArgs e)
{
using (SqlConnection con = Connection.GetConnection())
{
string sql = "Select Password From Registeration Where UserName=@UserName And Email=@Email";
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("karim-gamal@elarabygroup.com", "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;
}
}
答案 0 :(得分:1)
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中修复。