发送邮件的MVC表格

时间:2011-10-29 16:46:57

标签: c# asp.net-mvc-3

基本上我有一个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();
    }

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

2 个答案:

答案 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>