C# 发送邮件的MVC表单

C# 发送邮件的MVC表单,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,基本上,我有一个MVC3表单,当有人在我的网站上留言时,它会向我的收件箱发送邮件 出于某种原因,它抛出一个SmtpException,并显示消息:“发送邮件失败。” [HttpPost] public ActionResult联系人(字符串名称、字符串电子邮件、字符串消息) { 字符串From=“contactform@*****.com”; 字符串To=“info@******.com”; 字符串主题=名称; 字符串体=name+“写:”+消息; System.Net.Mail.MailMes

基本上,我有一个MVC3表单,当有人在我的网站上留言时,它会向我的收件箱发送邮件

出于某种原因,它抛出一个SmtpException,并显示消息:“发送邮件失败。”

[HttpPost]
public ActionResult联系人(字符串名称、字符串电子邮件、字符串消息)
{
字符串From=“contactform@*****.com”;
字符串To=“info@******.com”;
字符串主题=名称;
字符串体=name+“写:

”+消息; System.Net.Mail.MailMessage Email=新的System.Net.Mail.MailMessage(From、To、Subject、Body); System.Net.Mail.SmtpClient SMPTobj=新系统.Net.Mail.SmtpClient(“smtp.*********.Net”); SMPTobj.EnableSsl=false; SMPTobj.Credentials=new System.Net.NetworkCredential(“info@*********.com”,“********”); 尝试 { 发送(电子邮件); } 捕获(例外情况除外) { Debug.WriteLine(例如消息); 抛出新异常(); } 返回视图(); }

这可能与在本地测试而不是在服务器上测试有关吗?

您需要将SmtpClient.Port设置为主机电子邮件端口吗?

我建议您不要尝试重新引发新异常,只使用

 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>


在本地运行时是否会出现此错误?在服务器上?二者都您是否在web.config中配置SMTP服务器?是否尝试设置
SMPTobj.EnableSsl=true
在gmail
SMPTobj.host=“smtp.gmail.com”的情况下,您还需要像这样设置主机
并指定一个端口(gmail)
SMPTobj.port=587它发生在本地和web服务器上。我收到错误“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应”
<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>