在mvc3 razor中发送确认电子邮件

本文关键字:确认 电子邮件 mvc3 razor | 更新日期: 2023-09-27 17:49:21

当我点击创建时,它将被保存在数据库中,以及发送到有关MailId的电子邮件,但我得到错误,如无法连接到sqlserverdatabase。有人能帮帮我吗? !

在模型中:我已经添加了数据库

using System;
using System.Collections.Generic;
namespace EmployeeMVC.Models
{
    public partial class TblEmployeeDetail
    {
        public int id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string EmailId { get; set; }
        public System.DateTime DOB { get; set; }
        public string MobileNo { get; set; }
        public string Gender { get; set; }
        public string Country { get; set; }
        public string State { get; set; }
        public string Skills { get; set; }
        public string Address { get; set; }
    }
}

在Controller:我已经添加了方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using EmployeeMVC.Models;
using System.Data;
using System.Data.Entity;
using System.Text;
using System.Data.Entity.Validation;
using System.Web.UI.WebControls;
using EmployeeMVC.Infrastructure;
using System.Web.Security;
using System.Text.RegularExpressions;
namespace EmployeeMVC.Controllers
{
    public class EmployeeController : Controller
    {
        public EmployeeMVCEntities1 db = new EmployeeMVCEntities1();
        //ss
        // GET: /Employee/
        public ActionResult Index()
        {
            using (db = new EmployeeMVCEntities1())
            {
                return View(db.TblEmployeeDetails.ToList());
            }
        }
        // GET: /Employee/Details/5
        public ActionResult Details(int id)
        {
            using (db = new EmployeeMVCEntities1())
            {
                return View(db.TblEmployeeDetails.Find(id));
            }
        }

        public ActionResult Create()
        {
            var Country = (from s in db.TblCountries
                           select new
                           {
                               s.CountryId,
                               s.CountryName
                           }).OrderBy(c => c.CountryName);
            ViewBag.Country = new SelectList(Country, "CountryId", "CountryName");

            IEnumerable<TblSkill> skillList = (from x in db.TblSkills select x).ToList();
            ViewBag.skill = skillList.Select(c => new SelectListItem{
                Text = c.Skills.ToString(),
                Value = c.SkillsId.ToString()
            });
            return View();
        }
        public ActionResult Verify(string id)
        {
            if (string.IsNullOrEmpty(id) || (!Regex.IsMatch(id, @"[0-9a-f]{8}'-([0-9a-f]{4}'-){3}[0-9a-f]{12}")))
            {
                ViewBag.Msg = "Not Good!!!";
                return View();
            }
            else
            {
                var user = Membership.GetUser(new Guid(id));
                if (!user.IsApproved)
                {
                    user.IsApproved = true;
                    Membership.UpdateUser(user);
                    FormsAuthentication.SetAuthCookie(user.UserName, false);
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    FormsAuthentication.SignOut();
                    ViewBag.Msg = "Account Already Approved";
                    return RedirectToAction("LogOn");
                }
            }
        }
        //
        // POST: /Employee/Create
        [HttpPost]
        public ActionResult Create(TblEmployeeDetail emp)
        {
            int CId = Convert.ToInt32(emp.Country);
            var Cname = (from c in db.TblCountries
                         where c.CountryId == CId
                         select c.CountryName).Single();
            int SId = Convert.ToInt32(emp.Skills);
            var Sname = (from sn in db.TblSkills
                         where sn.SkillsId == SId
                         select sn.Skills).SingleOrDefault();

            if (ModelState.IsValid)
            {    
                try
                {
                    emp.Country = Cname;
                    emp.Skills = Sname;
                    db.TblEmployeeDetails.Add(emp);
                    db.SaveChanges();   

                     // Attempt to register the user
                    MembershipCreateStatus createStatus;
                    //Make sure the user is not approve at this point!!!
                    Membership.CreateUser(emp.FirstName, emp.LastName, emp.EmailId,
                    null, null, true, null, out createStatus);
                    if (createStatus == MembershipCreateStatus.Success)
                    {
                        EmailManager.SendConfirmationEmail(emp.EmailId);
                        FormsAuthentication.SetAuthCookie(emp.FirstName,false /* createPersistentCookie */);
                        return RedirectToAction("create", "Account");
                    }
                    else
                    {
                        ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
                    }    


                    return RedirectToAction("Index");
                }
                catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (var failure in dbEx.EntityValidationErrors)
                    {
                        sb.AppendFormat("{0} failed validation'n", failure.Entry.Entity.GetType());
                        foreach (var error in failure.ValidationErrors)
                        {
                            sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                            sb.AppendLine();
                        }
                    }
                    throw new DbEntityValidationException("Entity Validation Failed - errors follow:'n" + sb.ToString(), dbEx); //addthe original exception as the innerException
                }

            }
            return View(emp);
        }


        public ActionResult Edit(int id)
        {
            using (db = new EmployeeMVCEntities1())
            {
                return View(db.TblEmployeeDetails.Find(id));
            }
        }

        // POST: /Employee/Edit/5
        [HttpPost]
        public ActionResult Edit(int id, TblEmployeeDetail EmployeeDetails)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    db.Entry(EmployeeDetails).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(EmployeeDetails);
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Delete(int id)
        {
            using (db = new EmployeeMVCEntities1())
            {
                return View(db.TblEmployeeDetails.Find(id));
            }
        }
        //
        // POST: /Employee/Delete/5
        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteEmployee(int id)
        {
            //db.Entry(EmployeeDetails).State = EntityState.Deleted;
            TblEmployeeDetail tbl = db.TblEmployeeDetails.Find(id);
            db.TblEmployeeDetails.Remove(tbl);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    }
}

在基础设施文件夹中的EmailManager是:For Email Confirmation

using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using EmployeeMVC.Models;
    using System.Net.Mail;
    using System.Text;

    namespace EmployeeMVC.Infrastructure
    {
        public class EmailManager
        {
            private const string EmailFrom = "noreplay@gmail.com";
            public static void SendConfirmationEmail(string FirstName)
            {
                StringBuilder MailBody = new StringBuilder();
                var user = Membership.GetUser(FirstName.ToString());
                var confirmationGuid = user.ProviderUserKey.ToString();
                var verifyUrl = HttpContext.Current.Request.Url.GetLeftPart
                    (UriPartial.Authority) + "/Employee/Verify" + confirmationGuid;
                using (var client = new SmtpClient())
                {
                    using (var message = new MailMessage(EmailFrom, user.Email))
                    {
                        message.Subject = "Please Verify your Account";
                        MailBody.Append("<html><table cellpadding='0' cellspacing='0' width='100%' align='center'>" +
                                "<tr><td><p>Dear " + user.UserName + "</p><br>");
                        MailBody.Append("To verify your account, please click the following link:<span style='font-weight:bold;'><a href='""
                            + verifyUrl + "'" target='"http://localhost:59874'">"
                            + verifyUrl + "</a></span> to complete your registration.<br>");

                        message.IsBodyHtml = true;
                        client.EnableSsl = true;
                        client.Send(message);
                    };
                };

        }
    }
}
在web . config中

:

<?xml version="1.0" encoding="utf-8"?>
    <!--
      For more information on how to configure your ASP.NET application, please visit
      http://go.microsoft.com/fwlink/?LinkId=152368
      -->
    <configuration>
      <connectionStrings>
        <add name="ApplicationServices" connectionString="data source=.'SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
        <add name="EmployeeMVCEntities" connectionString="metadata=res://*/Models.EmployeeModel.csdl|res://*/Models.EmployeeModel.ssdl|res://*/Models.EmployeeModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=192.168.1.200;Initial Catalog=EmployeeMVC;User ID=sa;Password=DBserver123;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
        <add name="EmployeeMVCEntities1" connectionString="metadata=res://*/Models.EmployeeModel.csdl|res://*/Models.EmployeeModel.ssdl|res://*/Models.EmployeeModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=192.168.1.200;Initial Catalog=EmployeeMVC;User ID=sa;Password=DBserver123;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
      <appSettings>
        <add key="ClientValidationEnabled" value="true" />
        <add key="UnobtrusiveJavaScriptEnabled" value="true" />
      </appSettings>
      <system.web>
        <compilation debug="true" targetFramework="4.0">
          <assemblies>
            <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
          </assemblies>
        </compilation>
        <authentication mode="Forms">
          <forms loginUrl="~/Account/LogOn" timeout="2880" />
        </authentication>
        <membership>
          <providers>
            <clear />
            <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
          </providers>
        </membership>
        <profile>
          <providers>
            <clear />
            <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
          </providers>
        </profile>
        <roleManager enabled="false">
          <providers>
            <clear />
            <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
            <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
          </providers>
        </roleManager>
        <pages>
          <namespaces>
            <add namespace="System.Web.Helpers" />
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Routing" />
            <add namespace="System.Web.WebPages" />
          </namespaces>
        </pages>
      </system.web>
      <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />
        <modules runAllManagedModulesForAllRequests="true" />
      </system.webServer>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
      <system.net>
        <mailSettings>
          <smtp deliveryMethod="Network">
            <network host="smtp.gmail.com" port="587" userName="idsignbilling@Gmail.com" password="iDsign@123" />
          </smtp>
        </mailSettings>
      </system.net>
    </configuration>

创建视图:

 @model EmployeeMVC.Models.TblEmployeeDetail
    @{
        ViewBag.Title = "Create";
    }
    <h2>
        Create</h2>
    <link href="../../Content/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    @*<script src="../../Scripts/EditorHookup.js" type="text/javascript"></script>
    <script src="../../Scripts/RangeDateValidator.js" type="text/javascript"></script>*@
    <link href="../../Content/Calendar.css" rel="stylesheet" type="text/css" />
    <script src="../Scripts/jquery.ui.core.js" type="text/javascript"></script>
    <script src="../Scripts/jquery.ui.datepicker.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            $("#DOB").datepicker({
                changeMonth: true,
                changeYear: true,
                yearRange: "-20:+0"
            });
        });
    </script>
    @*<script>
        $(function () {
            ).datepicker();
        });
    </script>*@
    @using (Html.BeginForm())
    {    
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>TblEmployeeDetail</legend>
            <div class="editor-label">
                @Html.LabelFor(model => model.FirstName)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.FirstName)
                @Html.ValidationMessageFor(model => model.FirstName)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.LastName)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.LastName)
                @Html.ValidationMessageFor(model => model.LastName)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.EmailId)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.EmailId)
                @Html.ValidationMessageFor(model => model.EmailId)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.DOB)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.DOB)
                @Html.ValidationMessageFor(model => model.DOB)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.MobileNo)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.MobileNo)
                @Html.ValidationMessageFor(model => model.MobileNo)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.Gender)
            </div>
            <div class="editor-field">
                @Html.RadioButtonFor(model => model.Gender, "Male", true)Male
                @Html.RadioButtonFor(model => model.Gender, "Female", true)Female
                @Html.ValidationMessageFor(model => model.Gender)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.Country)
            </div>
            <div class="editor-field">
                @* @Html.EditorFor(Model=> Model.Country)*@ @* @Html.DropDownListFor(m => m.Country, new SelectList(new string[] {"Select","India", "USA", "UK", "Australia"}, "Country"))*@
                @* @Html.DropDownListFor(model=>model.Country,)*@ @*@Html.DropDownListFor(model => model.Country, new SelectList(Model.Country,"Value", "Text"), "Select Contry")          *@
                @*@Html.ValidationMessageFor(model=>Model.Country)*@
                @Html.DropDownList("Country", "--select country--")
                @Html.ValidationMessageFor(model => model.Country)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.State)
            </div>
            <div class="editor-field">
                @* @Html.DropDownListFor(m => m.State, new SelectList(new string[] { "Select", "AP", "UP", "London", "Aust" }, "Country"))*@
                @* @Html.DropDownList("State","Select State")*@
                @Html.EditorFor(Model => Model.State)
                @Html.ValidationMessageFor(model => model.State)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.Skills)
            </div>
            <div class="editor-field">
                @{ 
           IEnumerable<SelectListItem> skill = ViewBag.skill;
           foreach (var item in skill)
           {
                    @Html.CheckBox("Skills", false, new { value = item.Value });                                                             
                    @*<input type="checkbox" name="skillsId" value="@item.Text" /> *@
                    <label>@item.Text</label>  
                    @Html.ValidationMessageFor(model => model.Skills)
           }
                }
               </div>
            @* @Html.CheckboxList("skillId",new { @checked="checked" } )*@ @* @Html.CheckBox("skill", Model.skill == 1 ? true : false)*@
            @*@Html.CheckBox("skill", model == null ? false : (model.Ischecked == 1 ? true : false), new { @value = "true" })*@
            @* @Html.EditorFor(Model => Model.Skills)
                @Html.ValidationMessageFor(model => model.Skills)*@ @* @{
               List<EmployeeMVC.Models.TblSkills> tag = ViewData["skills"] as List<EmployeeMVC.Models.TblSkills>;
               foreach (var item in skill)
                 {
                 @Html.CheckBoxList("Skills", true, new { value = item.SkillsId});
                <label>@item.Skills</label>  
                 @Html.ValidationMessageFor(model => model.Skills)
                 }
                }*@ @*<div class="editor-field">
                <table style="border: none;">
                    <tr>
                        @{
           List<EmployeeMVC.Models.TblSkill> Skills = ViewBag.skill;
           for (int i = 0; i < Skills.Count; i++)
           {
               Response.Write("<td style='border: none;'>");
               Response.Write(string.Format("<input type='checkbox' id='skill{0}' name='skill' value='{0}' {2}/><label for='skill{0}'>{1}</label><br/>",
               Skills[i].SkillsId, "&nbsp;" + Skills[i].Skills + "&nbsp;",
               (EmployeeMVC.Infrastructure.HtmlHelpers.GetTblSkill())
                ));
               Response.Write("</td>");
               if ((i + 1) % 3 == 0)
               {
                   Response.Write("</tr><tr>");
               }
           }
                        }
                    </tr>
                </table>
                @Html.ValidationMessageFor(model => model.Skills)
            </div>*@
            <div class="editor-label">
                @Html.LabelFor(model => model.Address)
            </div>
            <div class="editor-field">
                @Html.TextAreaFor(model => model.Address)
                @Html.ValidationMessageFor(model => model.Address)
            </div>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset> 
    }
    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>

在mvc3 razor中发送确认电子邮件

成员提供程序使用ApplicationServices连接字符串。确保此连接字符串指向正确的数据库。

从你的网页。配置,它不同于其他实体框架连接字符串:

<add name="ApplicationServices" connectionString="data source=.'SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
        <add name="EmployeeMVCEntities" connectionString="metadata=res://*/Models.EmployeeModel.csdl|res://*/Models.EmployeeModel.ssdl|res://*/Models.EmployeeModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=192.168.1.200;Initial Catalog=EmployeeMVC;User ID=sa;Password=DBserver123;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

如果您在本地主机上运行此程序(通常是在开发机器上),则可能没有安装SMTP服务器。如果是这种情况,你的邮件尝试将抛出一个异常。要解决这个问题,请到这里获取Papercut: http://papercut.codeplex.com/-它将无缝地拦截您的SMTP请求,以便您的代码可以继续它正在做的事情。