0

当我单击视图页面上的按钮时,我正在寻找一种发送电子邮件的方法。

在我的查看页面上,我有一个文本字段,用户可以在其中填写收件人的电子邮件

 @Html.TextBoxFor(m => m.ReceiverMail, new { @placeholder="E-mail reveiver"})

电子邮件必须发送到单击按钮后在文本字段中填写的电子邮件。

<input type="submit" class="btn btn-large btn-success" value="Send mail" />

发件人也可以在文本字段中填写他的电子邮件

@Html.TextBoxFor(m => m.SenderMail, new { @placeholder="E-mail sender"})    

邮件的文本可以是这样的:“这是一封来自 (SenderMail) 的测试电子邮件”谁能给我一个简单的例子?

4

2 回答 2

0

创建一个带有操作帖子的控制器。

[HttpPost]
public ActionResult myaction(string ReceiverMail)
{
    if (ModelState.IsValid)
    {
        // ..

        new mailController().sendMail(ReceiverMail).Deliver(); // Send mail
        return RedirectToRoute("Usuario_default", new RouteValueDictionary { { "controller", "home" }, { "action", "logon" } });
    }

    Response.StatusCode = (int)HttpStatusCode.BadRequest;
    return View(viewModel);
}

使用ActionMailer发送电子邮件。

于 2013-05-16T11:28:08.367 回答
0

首先你可以创建控制器扩展方法:

  public static partial class ControllerExtensions
    {
        public static string RenderPartialViewToString(this ControllerBase controller, string partialPath, object model)
        {
            if (string.IsNullOrEmpty(partialPath))
                partialPath = controller.ControllerContext.RouteData.GetRequiredString("action");

            controller.ViewData.Model = model;

            using (StringWriter sw = new StringWriter())
            {
                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialPath);
                ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
                // copy model state items to the html helper 
                foreach (var item in viewContext.Controller.ViewData.ModelState)
                    if (!viewContext.ViewData.ModelState.Keys.Contains(item.Key))
                    {
                        viewContext.ViewData.ModelState.Add(item);
                    }


                viewResult.View.Render(viewContext, sw);

                return sw.GetStringBuilder().ToString();
            }
        }
    }

然后,创建一个接收 SenderEmail 接收器电子邮件的控制器操作方法。然后创建模板变量

   var template= this.RenderPartialViewToString("MailToSend", model);

这会将 View MailToSend 转换为字符串。

之后,您可以使用 MailMessage 类发送电子邮件:

       SmtpClient client = new SmtpClient();
       client.Host = "smtp.gmail.com";  //if your email is gmail
       client.Port = 25;
       client.UseDefaultCredentials = false;
       client.Credentials = smtpCrede;
       client.EnableSsl = true;

       MailMessage message = new MailMessage();
       message.From = new MailAddress(here goes email");
       message.To.Add(new MailAddress(email));
       message.IsBodyHtml = true;
       message.Body = template;
       client.Send(message);
       return true;

并声明:

      private NetworkCredential smtpCrede = new NetworkCredential("your email, "your email password"); 

动作方法之外。

于 2013-05-20T15:45:48.830 回答