如何使用 MVC 5 C# 将表单中的值传递到电子邮件正文中

本文关键字:值传 正文 电子邮件 表单 MVC 何使用 | 更新日期: 2023-09-27 18:32:37

好的,我的网站上有一个联系表格。我能够发送带有标签的电子邮件,但我似乎无法发送值。所以,基本上我的电子邮件看起来像

名字:

姓:

公司:

评论:

只想知道我做错了什么。

控制器

    [HttpGet]
    public IActionResult Contact()
    {
        ViewData["Message"] = "Contact Us TODAY!";            
        return View();
    }

    [HttpPost]
    public IActionResult SendEmail()
    {
        var NewContact = new Forms();
        string body = "First Name: " + NewContact.FirstName + "'n"
                            + "Last Name:" + NewContact.LastName + "'n"
                            + "Company:" + NewContact.Company + "'n'n"
                            + "Comments:" + NewContact.Comments;
        MailMessage mailBody = new MailMessage("Something@example.com", "Somethingelse@example.com");
        mailBody.Subject = "Contact Form";
        mailBody.Body = body;
        SmtpClient smtpClient = new SmtpClient("smtp.aol.com", 587);
        smtpClient.Credentials = new NetworkCredential()
        {
            UserName = UserNameHidden,
            Password = PasswordHidden
        };
        smtpClient.EnableSsl = true;
        smtpClient.Send(mailBody);
        return Redirect("Contact");
    }

查看页面

<form asp-controller="Home" asp-action="SendEmail" name="ContactUs" method="post" class="bs-example-form">
            <div class="row">
                <div class="row">
                    <div class="text-danger" asp-validation-summary="ValidationSummary.All">
                        <p></p>
                    </div>
                    <div class="col-sm-6">
                        <div class="form-group">
                            <label asp-for="FirstName">First Name:</label>
                            <input class="form-control" asp-for="FirstName" placeholder="First Name*" type="text" required />
                            <span asp-validation-for="FirstName" class="text-danger"></span>
                        </div>
                    </div>
                    <div class="col-sm-6">
                        <div class="form-group">
                            <label asp-for="LastName">Last Name:</label>
                            <input class="form-control" asp-for="LastName" placeholder="Last Name*" type="text" required />
                            <span asp-validation-for="LastName" class="text-danger"></span>
                        </div>
                    </div>
                    <div class="col-sm-6">
                        <div class="form-group">
                            <label asp-for="PhoneNumber">Phone:</label>
                            <input class="form-control" asp-for="PhoneNumber" type="tel" asp-format="000-000-0000" onloosefocus="format"  placeholder="Phone Number*" required />
                            <span asp-validation-for="PhoneNumber" class="text-danger"></span>
                        </div>
                    </div>
                    <div class="col-sm-6">
                        <div class="form-group">
                            <label asp-for="Email">Email:</label>
                            <input class="form-control" asp-for="Email" type="email" placeholder="Email*" title="example@meems.org" required />
                            <span asp-validation-for="Email" class="text-danger"></span>
                        </div>
                    </div>
                </div>
                <span class="formspacer"></span><hr />
                <div class="row">
                    <div class="col-sm-6">
                        <div class="form-group">
                            <label asp-for="Company">Company:</label>
                            <input class="form-control" asp-for="Company" placeholder="Company*" title="If you do not represent a company, please type 'NONE'." required />
                            <span asp-validation-for="Company" class="text-danger"></span>
                        </div>
                    </div>
                    <div class="col-sm-6">
                        <div class="form-group">
                            <label asp-for="StreetAddress">Street Address:</label>
                            <input class="form-control" asp-for="StreetAddress" placeholder="Street Address*" required />
                            <span asp-validation-for="StreetAddress" class="text-danger"></span>
                        </div>
                    </div>
                    <div class="col-sm-6">
                        <div class="form-group">
                            <label asp-for="City">City:</label>
                            <input class="form-control" asp-for="City" placeholder="City*" required />
                            <span asp-validation-for="City" class="text-danger"></span>
                        </div>
                    </div>
                    <div class="col-sm-6">
                        <div class="form-group">
                            <label asp-for="State">State:</label>
                            <input class="form-control" asp-for="State" placeholder="State*" required />
                            <span asp-validation-for="State" class="text-danger"></span>
                        </div>
                    </div>
                    <div class="col-sm-6">
                        <div class="form-group">
                            <label asp-for="ZipCode">Zip:</label>
                            <input class="form-control" asp-for="ZipCode" placeholder="Zip Code*" required />
                            <span asp-validation-for="ZipCode" class="text-danger"></span>
                        </div>
                    </div>
                        <div class="col-sm-12 bg-grey">
                            <div class="form-group">
                                <label asp-for="Comments">Comments:</label>
                                <input class="form-control" asp-for="Comments" placeholder="Comments" />
                            </div>
                        </div>
                </div>
                <div class="clearfix"></div>
                <div class="row">
                    <div class="col-sm-12">
                        <div class="buttonWrapper text-center">
                            <button class="btn btn-primary" type="reset" role="button">Reset</button>
                            <button class="btn btn-danger" type="submit" role="button" title="Coming Soon Please Just Email Us With This Information">Send</button>

public class Forms
    {
        //Company Contact Information Customer
        public string Company { get; set; }
        [Required]
        public string FirstName { get; set; }
        [Required]
        public string LastName { get; set; }
        [Required]
        public string Email { get; set; }
        [Required]
        public long PhoneNumber { get; set; }
        public string Comments { get; set; }
        //Company Address Customer
        [Required]
        public string StreetAddress { get; set; }
        [Required]
        public string City { get; set; }
        [Required]
        public string State { get; set; }
        [Required]
        public string ZipCode { get; set; }


    }

如何使用 MVC 5 C# 将表单中的值传递到电子邮件正文中

看看这个。

[HttpPost]
public IActionResult SendEmail()
{
    var NewContact = new Forms();
   // Existing code
} 

您正在创建一个全新的类对象Forms。此新对象属性将具有默认值,而不是您发布表单中的值。

您可以做的是,向类型为 FormsSendEmail操作方法添加一个参数。提交表单后,DefaultModelBinder 会将表单字段映射到参数,因为属性名称与表单字段名称匹配。

[HttpPost]
public IActionResult SendEmail(Forms NewContact)
{       
   // Existing code which reads from NewContact object property values
}

您正在声明一个新的 Forms 对象,而不是在 post 方法中的参数中传递它。因此,这些字段都初始化为默认值。

正如 Nick 所说,您需要将模型作为参数传递给控制器方法。

在使用模型的值之前,还需要检查模型的验证状态,并且(通常)如果模型无效,则返回相同的视图,以便向用户显示验证错误。

因此,您的方法可能是这样的:

[HttpPost]
public IActionResult SendEmail(Forms NewContact)
{
    if (ModelState.IsValid)
    {
        // model is valid, you can send email now
        string body = "First Name: " + NewContact.FirstName + "'n"
                            + "Last Name:" + NewContact.LastName + "'n"
                            + "Company:" + NewContact.Company + "'n'n"
                            + "Comments:" + NewContact.Comments;
        MailMessage mailBody = new MailMessage("Something@example.com", "Somethingelse@example.com");
        mailBody.Subject = "Contact Form";
        mailBody.Body = body;
        SmtpClient smtpClient = new SmtpClient("smtp.aol.com", 587);
        smtpClient.Credentials = new NetworkCredential()
        {
            UserName = UserNameHidden,
            Password = PasswordHidden
        };
        smtpClient.EnableSsl = true;
        smtpClient.Send(mailBody);
        return Redirect("Contact");
    }
    else
    {
        // model contains validation errors
        // return the same view so form is populated with existing values, 
        // and validation errors are shown
        //
        // You are responsible for populating model values in view page
        // it will be done automatically if you're using tag helpers like @Html.EditorFor()
        return View("Contact", model);
    }
}

此外,发送邮件可能需要一些时间,因此最好使控制器方法异步。