通过邮政mvc发送电子邮件

时间:2017-04-20 18:49:52

标签: c# asp.net-mvc postal

每次用户创建新评论时,我都会尝试发送电子邮件。 我已经安装了Postal.MVC5包

评论模型

public int Id { get; set; }

    [Required]
    [MinLength(3)]
    [MaxLength(20)]
    public string Asunto { get; set; }
    [Required]
    public string Detalle { get; set; }
    [DataType(DataType.Date)]
    public DateTime Fecha { get; set; }
    [DataType(DataType.Time)]
    public DateTime Hora { get; set; }
    public  virtual Local local { get; set; }
    public virtual string username { get; set; }

NewCommentEmail模型

public class NewCommentEmail : Email
{
    public string To { get; set; }
    public string UserName { get; set; }
    public string Comment { get; set; }
}

控制器

 [HttpPost]
    public ActionResult AgregarComentario(NotasAdjuntas nota)
    {
        try
        {
            var localId = int.Parse(Request["LocalID"]);
            nota.username = Session["Username"].ToString();

            using (var db = new AutoContex())
            {
                nota.local = db.Locales.Find(localId);
                db.Entry(nota.local).Reference(p => p.Proveedor).Load();
                db.Notas.Add(nota);
                db.SaveChanges();
            }

            var email = new NewCommentEmail();
            email.To = "emilia.lasaga@pedidosya.com";
            email.UserName = nota.username;
            email.Comment = nota.Asunto;               
            email.Send();
            return RedirectToAction("Details", new { @id = localId });                
        }
        catch
        {
            return View();
        }
    }

我还将此添加到了webconfig

<system.net>
<mailSettings>
  <smtp deliveryMethod="SpecifiedPickupDirectory">
    <specifiedPickupDirectory pickupDirectoryLocation="C:\Temp\" />
  </smtp>
</mailSettings>

我得到的错误是: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:无法在NULL引用中执行时连接

收到错误的行是:

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

查看

@using (Html.BeginForm()) 
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>Notas Adjuntas</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

    <div>
        <ledgend>Datos del Local<ledgend>
                <div class="panel-title">Id</div>
                <div class="text-left">
                    <input type="Text" name="LocalID" id="LocalID" value="@ViewBag.Local.Id" />
                </div>
            <table class="table">
                <tr>
                    <th>Id</th>
                    <th>Viejo Id</th>
                    <th>Nombre</th>
                    <th>Unificado Con</th>
                    <th>Dirección</th>
                    <th>Telefono</th>
                    <th>Localidad</th>
                    <th>Provincia</th>
                    <th>Proveedor</th>
                    <th>Estado</th>

                    <th>Fecha Instalación</th>
                </tr>
                <tr>
                    <td>@ViewBag.Local.NuevoId</td>
                    <td>@ViewBag.Local.ViejoId</td>
                    <td>@ViewBag.Local.NombreComercio</td>
                    <td>@ViewBag.Local.UnificadoCon</td>
                    <td>@ViewBag.Local.Direccion</td>
                    <td>@ViewBag.Local.Telefono</td>
                    <td>@ViewBag.Local.Localidad</td>
                    <td>@ViewBag.Local.Provincia</td>
                    <td>@ViewBag.Local.Proveedor.Nombre</td>
                    <td>@ViewBag.Local.Estado.State</td>

                    <td>@ViewBag.Local.FechaInstalacion</td>
                </tr>
            </table>

    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Asunto, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Asunto, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Asunto, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
@Html.LabelFor(model => model.Detalle, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
    @Html.EditorFor(model => model.Detalle, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.Detalle, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
    @Html.LabelFor(model => model.Fecha, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Fecha, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Fecha, "", new { @class = "text-danger" })
    </div>
</div>
<div class="form-group">
    @Html.LabelFor(model => model.Hora, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Hora, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Hora, "", new { @class = "text-danger" })
    </div>
</div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div>

1 个答案:

答案 0 :(得分:0)

我可以通过smtps发送电子邮件

这不是我想要的第一种方式(我想通过Postal.MVC5来实现)

我做的是:

用于创建电子邮件的新类

    using System.Net.Mail;
using System.Net;

namespace AutoPlanMCV.Models
{
    public class NewCommentEmail 
    {
        public static string GmailUsername { get; set; }
        public static string GmailPassword { get; set; }
        public static string GmailHost { get; set; }
        public static int GmailPort { get; set; }
        public static bool GmailSSL { get; set; }

        public string ToEmail { get; set; }
        public string Subject { get; set; }
        public string Body { get; set; }
        public bool IsHtml { get; set; }

        static NewCommentEmail()
        {
            GmailHost = "smtp.gmail.com";
            GmailPort = 25; // Gmail can use ports 25, 465 & 587; but must be 25 for medium trust environment.
            GmailSSL = true;
        }

        public void Send()
        {
            SmtpClient smtp = new SmtpClient();
            smtp.Host = GmailHost;
            smtp.Port = GmailPort;
            smtp.EnableSsl = GmailSSL;
            smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtp.UseDefaultCredentials = false;
            smtp.Credentials = new NetworkCredential(GmailUsername, GmailPassword);

            using (var message = new MailMessage(GmailUsername, ToEmail))
            {
                message.Subject = Subject;
                message.Body = Body;
                message.IsBodyHtml = IsHtml;
                smtp.Send(message);
            }
        }

}

<强>控制器

public ActionResult AgregarComentario(NotasAdjuntas nota)
    {

        try
        {

            var localId = int.Parse(Request["LocalID"]);
            nota.username = Session["Username"].ToString();

            using (var db = new AutoContex())
            {
                nota.local = db.Locales.Find(localId);
                db.Entry(nota.local).Reference(p => p.Proveedor).Load();
                db.Notas.Add(nota);
                db.SaveChanges();

                if (nota.Asunto.Contains("capa"))
                {
                    NewCommentEmail.GmailUsername = "youremail@gmail.com";
                    NewCommentEmail.GmailPassword = "yourpassword";

                    NewCommentEmail mailer = new NewCommentEmail();
                    mailer.ToEmail = "Emailto@gmail.com";
                    mailer.Subject = nota.Asunto;
                    mailer.Body = nota.local.NuevoId + " --  --" + nota.local.NombreComercio + "<br />" + nota.Detalle + "<br /> Hora:" + nota.Hora;
                    mailer.IsHtml = true;
                    mailer.Send();
                }
            }

            return RedirectToAction("Details", new { @id = localId });

        }
        catch
        {
            return View();
        }

    }

我删除了webconfig中的内容,但没有编辑我的视图。 之后我没有收到任何错误