ASP.NET MVC 4:从网站发送表单到电子邮件

5

我在我的MVC网站上有一个反馈表格,它看起来像这样:

enter image description here

我需要将这个表单发送到电子邮件。

我创建了一个用于我的表格的模型。

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;

 namespace ComponentTrading.Web.Models
 {
public class FeedbackForm
    {
    public string Name { get; set; } 
    public string Email { get; set; } 
    public string Phone { get; set; }
    public string Message { get; set; }
    }
}

我为我的表单Contacts.cshtml创建了视图。

 @using (Html.BeginForm("Contacts", "Home", FormMethod.Post, new { id = "contact-form" }))
{
<fieldset>
    @Html.TextBoxFor(model => model.Name, new { @Value = Name })
    @Html.TextBoxFor(model => model.Email, new { @Value = "E-mail" })
    @Html.TextBoxFor(model => model.Phone, new { @Value = Phone })
    @Html.TextAreaFor(model => model.Message, new { @class = "img-shadow" })
    <input class="form-button" data-type="reset" value="Clear" />
    <input class="form-button" data-type="submit" type="submit" value="Send" />
</fieldset>     
}

我在我的控制器中编写了这段代码

    [HttpGet]
    public ActionResult Contacts()
    {
        FeedbackForm temp = new FeedbackForm();
        temp.Message = @Resources.Global.Contacts_Form_Message_Field;
        return View(temp);
    }


    [HttpPost]
    public ActionResult Contacts(FeedbackForm Model)
    {
        string Text = "<html> <head> </head>" +
        " <body style= \" font-size:12px; font-family: Arial\">"+
        Model.Message+
        "</body></html>";

        SendEmail("tayna-anita@mail.ru", Text);
        FeedbackForm tempForm = new FeedbackForm();
        return View(tempForm);
    }


    public static bool SendEmail(string SentTo, string Text)
    {
        MailMessage msg = new MailMessage();

        msg.From = new MailAddress("Test@mail.ru");
        msg.To.Add(SentTo);
        msg.Subject = "Password";
        msg.Body = Text;
        msg.Priority = MailPriority.High;
        msg.IsBodyHtml = true;

        SmtpClient client = new SmtpClient("smtp.mail.ru", 25);



        client.UseDefaultCredentials = false;
        client.EnableSsl = false;
        client.Credentials = new NetworkCredential("TestLogin", "TestPassword");
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        //client.EnableSsl = true;

        try
        {
            client.Send(msg);
        }
        catch (Exception)
        {
            return false;
        }
        return true;
    }

我的代码没有任何错误,但是当我点击发送按钮时,我没有收到邮件,我的表单也没有变得清晰。

我使用了 Fiddler Web Debugger 并且在 Send 按钮点击后得到了以下结果 enter image description here

从上面的结果来看,一切似乎都没问题,所以我不知道出了什么问题?

2个回答

2
我已经复制粘贴了您的代码,并进行了一些小修改,使其能够正常运行:
  1. 我没有设置Credentials属性。
  2. 我修改了模板,删除了@Value属性:

    @Html.TextBoxFor(model => model.Name) @Html.TextBoxFor(model => model.Email) @Html.TextBoxFor(model => model.Phone)

这些是我所做的唯一更改,我成功地让您的应用程序工作。这让我相信,在您的SMTP客户端配置中一定有问题。您可以检查一下由client.Send(msg);抛出的异常吗?我预计它会说一些关于无效网络凭据或类似的东西。

我收到了你的电子邮件。请告诉我,你是如何更改 Smtp 设置的? - Heidel
@Heidel 我移除了Credentials属性,并将smtp客户端的地址替换为我的私人smtp服务器。 - Erik Schierboom

1

变更

catch (Exception)
    {
        return false;
    }

catch (Exception ex)
    {
// breakpoint here, inspect ex
        return false;
    }

在你的 catch 块中,尝试像这样返回 ex.Message:"return Content(ex.Message);"。 - Antevirus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接