基本上我有一个MVC 3表单,当有人在我的网站上留言时,它会将邮件发送到我的收件箱。
由于某种原因,它会抛出一个SmtpException,并显示消息:“发送邮件失败”。
[HttpPost]
public ActionResult Contact(string name, string email, string message)
{
string From = "contactform@******.com";
string To = "info@******.com";
string Subject = name;
string Body = name + " wrote:<br/><br/>" + message;
System.Net.Mail.MailMessage Email = new System.Net.Mail.MailMessage(From, To, Subject, Body);
System.Net.Mail.SmtpClient SMPTobj = new System.Net.Mail.SmtpClient("smtp.**********.net");
SMPTobj.EnableSsl = false;
SMPTobj.Credentials = new System.Net.NetworkCredential("info@*******.com", "*******");
try
{
SMPTobj.Send(Email);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
throw new Exception();
}
return View();
}
这可能与在本地测试它而不是在服务器上测试它有关吗?
答案 0 :(得分:1)
您是否需要将SmtpClient.Port设置为您的主机电子邮件端口?
答案 1 :(得分:1)
我建议你尽量不要重新抛出一个新的例外,而只是使用
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
throw;
}
重新抛出异常会重置堆栈,因此无法可靠地跟踪错误的来源。在这种情况下(无需重新抛出),您可能会在visual studio中看到InnerException和Status属性,这通常会为您提供有关失败原因的更多详细信息。 (通常是isp的阻塞端口25 smtp流量,以防你在本地测试)
其次,您可以尝试在web.config中配置所有连接详细信息,而不是在应用程序中进行硬编码,以便更轻松地测试更改。请参阅下面的使用gmail的示例:
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="username@gmail.com">
<network host="smtp.gmail.com" userName="username@gmail.com" password="password" enableSsl="true" port="587" />
</smtp>
</mailSettings>