【问题标题】:Not in sending email via SMTP in contact form in asp.net?不在 asp.net 的联系表格中通过 SMTP 发送电子邮件?
【发布时间】:2015-08-17 04:44:34
【问题描述】:

我创建了一个联系表格,它没有错误,但它没有发送电子邮件,这是我页面的主要目的?我正在使用 SMTP gmail 发送电子邮件。密码隐藏在此代码中,请在尝试之前更改。我很困惑为什么它不起作用。我尝试了很多,但都是徒劳的。我在 MVC 5 中工作,我认为存在与之相关的问题。

                //Model class code starts...........................................

            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Web;
            using System.Text;
            using System.ComponentModel.DataAnnotations;

            namespace Contacts.Models
            {
                public class Contact
                {
                    [Required]

                    [Display(Name = "Name *")]

                    public string Name { get; set; }

                    [Required]

                    [DataType(DataType.EmailAddress)]

                    [Display(Name = "Email address *")]

                    public string Email { get; set; }

                    [DataType(DataType.PhoneNumber)]

                    [Display(Name = "Phone Number")]

                    public string Phone { get; set; }

                    [Required]

                    [Display(Name = "Message *")]

                    public string Body { get; set; }

                    public DateTime SentDate { get; set; }

                    public string IP { get; set; }



                    public string BuildMessage()
                    {

                        var message = new StringBuilder();

                        message.AppendFormat("Date: {0:yyyy-MM-dd hh:mm}\n", SentDate);

                        message.AppendFormat("Email from: {0}\n", Name);

                        message.AppendFormat("Email: {0}\n", Email);

                        message.AppendFormat("Phone: {0}\n", Phone);

                        message.AppendFormat("IP: {0}\n", IP);

                        message.AppendFormat("Message: {0}\n", Body);

                        return message.ToString();

                    }
                }
            }

            Model class code end .............................

            Controller class code starts .............................

            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Web;
            using System.Web.Mvc;
            using Contacts.Models;
            using System.Net;
            using System.Net.Mail;
            using System.Collections;



            namespace Contacts.Controllers
            {
                public class ContactController : Controller
                {
                    public ActionResult Index()
                    {

                        ViewBag.Success = false;

                        return View(new Contact());

                    }

                    [HttpPost]

                    public ActionResult Index(Contact contact)
                    {

                        ViewBag.Success = false;

                        {
                            try
                            {

                                if (ModelState.IsValid)
                                {

                                    // Collect additional data;

                                    contact.SentDate = DateTime.Now;

                                    contact.IP = Request.UserHostAddress;



                                    SmtpClient smtpClient = new SmtpClient();
                                    smtpClient.UseDefaultCredentials = false;
                                    smtpClient.Credentials = new System.Net.NetworkCredential
                                    ("tehmina.diya@gmail.com", "********");

             smtpClient.EnableSsl = true;

                                    MailMessage mail = new MailMessage();
                                    mail.From = new MailAddress("tehmina.diya@gmail.com"); // From
                                    mail.To.Add(new MailAddress("tehmina.diya@gmail.com")); // To

                                    mail.Subject = "Your email subject"; // Subject
                                    mail.Body = contact.BuildMessage();



                                    contact.BuildMessage(); // Body
                                    ViewBag.Success = true;
                                    smtpClient.Send(mail);
                                }  

                            }

                            catch (Exception e)
                            {
                               Response.Write("Success");

                            }
                        }



                        return View();

                    }

                }
            }
             Controller class code ends .............................

            View class code Starts.............................

            @model  Contacts.Models.Contact

            @{

                ViewBag.Title = "Contact Page";

            }

            <h2> Contact Page</h2>

            <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>

            <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

            @Html.ValidationSummary(true, "Sending message was unsuccessful. Please correct the errors and try again.")

            @if (ViewBag.Success)
            {

                <h3>Your message was successfully sent!</h3>

            }

            @using (Html.BeginForm())
            {

                <div>

                    <fieldset>

                        <legend>Contact Information</legend>

                        <div class="editor-label">

                            @Html.LabelFor(model => model.Name)

                        </div>

                        <div class="editor-field">

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

                            @Html.ValidationMessageFor(model => model.Name)

                        </div>

                        <div class="editor-label">

                            @Html.LabelFor(model => model.Email)

                        </div>

                        <div class="editor-field">

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

                            @Html.ValidationMessageFor(model => model.Email)

                        </div>

                        <div class="editor-label">

                            @Html.LabelFor(model => model.Phone)

                        </div>

                        <div class="editor-field">

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

                            @Html.ValidationMessageFor(model => model.Phone)

                        </div>

                        <div class="editor-label">

                            @Html.LabelFor(model => model.Body)

                        </div>

                        <div class="editor-field">

                            @Html.ValidationMessageFor(model => model.Body)

                            <br />

                            <textarea rows="10" cols="60" name="Body"></textarea>

                        </div>

                        <p>

                            <input type="submit" value="Send" />

                        </p>

                    </fieldset>

                </div>

            }
            //View class ends....................

【问题讨论】:

    标签: c# smtp gmail contact-form asp.net-mvc-5.2


    【解决方案1】:

    这是 stackoverflow 中处理 smtp 和 gmail 的一个很好的链接。

    Sending email through Gmail SMTP server with C#

    不管怎样,我让你的代码工作了。您的 MVC 代码中有几个小错误。

    在你的控制器中,在 catch 块中,你有

        catch (Exception e)
        {
           Response.Write("Success");
        }
    

    改成

        catch (Exception e)
        {
           ModelState.AddModelError("",e.Message);
    
        }
    

    这会将您从 gmail 收到的错误添加到您的模型状态。 catch 块捕获错误,而不是成功!

    那么在你看来,你有下面这行代码

        @Html.ValidationSummary(true, "Sending message was unsuccessful. Please correct the errors and try again.")
    

    将其更改为:

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

    这将显示错误消息,如果传输失败,您将在 catch 块中捕获。

    现在,转到您的控制器并在以下行之前

        smtpClient.Send(mail)
    

    并添加以下代码

        smtpClient.Host = "smtp.gmail.com";
        smtpClient.Port = 587;
        smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
        smtpClient.Timeout = 20000;
    

    让它看起来像这样

        smtpClient.Host = "smtp.gmail.com";
        smtpClient.Port = 587;
        smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
        smtpClient.Timeout = 20000;
        smtpClient.Send(mail)
    

    它应该工作。如果您开始出现超时,则只需在代码中增加超时即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 2015-09-22
      • 2017-03-05
      相关资源
      最近更新 更多