通过邮政 mvc 发送电子邮件
Sending email through postal mvc
我试图在用户每次创建新评论时发送一封电子邮件。
我已经安装了包 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>
我可以通过 smtps 发送电子邮件
这不是我想要的第一种方法(我想通过 Postal.MVC5 来实现)
我做的是这样的:
新建 Class 以创建电子邮件
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 中的内容,并且没有编辑我的视图。
之后我没有收到任何错误
我试图在用户每次创建新评论时发送一封电子邮件。 我已经安装了包 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>
我可以通过 smtps 发送电子邮件
这不是我想要的第一种方法(我想通过 Postal.MVC5 来实现)
我做的是这样的:
新建 Class 以创建电子邮件
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 中的内容,并且没有编辑我的视图。 之后我没有收到任何错误