首页 > 解决方案 > ASP.NET MVC SMTP 不工作并在我单击提交按钮后返回错误值

问题描述

我尝试在 ASP.NET MVC 中使用 SMTP 发送电子邮件,并且每次该函数返回一个 false 值。你们能帮我解决问题吗?

我没有任何错误,但是一旦我单击带有某个值的提交按钮,就会client.Send(mailMessage)返回错误值。

@using (Html.BeginForm("Contact", "Contact")) {

<div class="container">
<p style="background:red" class="text-center w-50 m-auto">@ViewBag.contact</p>

@Html.ValidationSummary(true, "", new { @class = "text-danger" })

<div class="row">
    <div class="col-lg-6 col-md-6 col-sm-12 form-group">
        @Html.EditorFor(model => model.name, new { htmlAttributes = new { @class = "form-control mt-2", placeholder = "John Doe" } })
    </div>
    <div class="col-lg-6 col-md-6 col-sm-12 form-group">
        @Html.EditorFor(model => model.email, new { htmlAttributes = new { @class = "form-control mt-2", placeholder = "doe@email.com" } })
    </div>
</div>
<div class="form-group">
    @Html.EditorFor(model => model.subject, new { htmlAttributes = new { @class = "form-control mt-5", placeholder = "Please drop your comment?" } })
</div>

<input style="margin-top: 50px" type="submit" value="Send" id="btnsubmit" class="btn btn-primary text-center" />

</div>

我的控制器看起来像这样:

[HttpPost]
public ActionResult Contact(Contact contact)
{
    ViewBag.contact = null;

    if (!ModelState.IsValid)
    {
        ViewBag.contact = "Something went wrong";
        return View("Contact", contact);
    }

    ViewBag.message = null;
    bool result = false;

    result = SendEmail(contact.email, contact.name, contact.subject);

    if (result == true)
    {
        return RedirectToAction("Index");
    }
    else
        return View("Contact", contact);
}

public bool SendEmail(string toEmail, string subject, string body)
{
    try
    {
        string senderEmail = System.Configuration.ConfigurationManager.AppSettings["SenderEmail"].ToString();
        string senderPassword = System.Configuration.ConfigurationManager.AppSettings["SenderPassword"].ToString();

        SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
        client.EnableSsl = true;
        client.Timeout = 100000;
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;
        client.Credentials = new NetworkCredential(senderEmail, senderPassword);

        MailMessage mailMessage = new MailMessage(senderEmail, toEmail, subject, body);
        mailMessage.IsBodyHtml = true;
        mailMessage.BodyEncoding = UTF8Encoding.UTF8;

        client.Send(mailMessage);

        ViewBag.contact = "Successfully sent";

        return true;
    }
    catch(Exception e)
    {
        ViewBag.contact = "Unsuccessful, something was wrong";
        return false;
    }
}

你能帮我解决这个问题吗?

先感谢您。

标签: asp.net-mvcsmtp

解决方案


我想,您忘记了 gmail 配置中的第 3 方访问配置。

管理可访问您帐户的第三方应用和服务


推荐阅读