如何从Asp.net Mvc-3发送电子邮件?

如何通过使用c#的mvc-3 asp.net发送邮件?

我必须发送一个忘记密码,所以我该怎么做? 我的代码如下。

型号代码

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations; namespace TelerikLogin.Models.ViewModels { public class ForgotPassword { public int user_id { get; set; } public string user_login_name { get; set; } public string user_password { get; set; } [Required] [Display(Name="Email Address : ")] public string user_email_address { get; set; } } } 

控制器代码

  public ActionResult ForgotPassword() { return View(); } [HttpPost] public ActionResult ForgotPassword(string user_email_address) { SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\MVC3\TelerikLogin\TelerikLogin\App_Data\Login.mdf;Integrated Security=True;User Instance=True"); DataTable dt1 = new DataTable(); string strQuery = string.Format("SELECT user_password FROM [user_master] WHERE user_email_address='{0}'",user_email_address); conn.Open(); SqlDataAdapter da1 = new SqlDataAdapter(strQuery, conn); da1.Fill(dt1); conn.Close(); if (dt1.Rows.Count > 0) { MailMessage msg = new MailMessage(); msg.From = new MailAddress("abc@gmail.com"); msg.To.Add(user_email_address); msg.Subject = "Password"; msg.Body = "Test1"; msg.Priority = MailPriority.High; SmtpClient client = new SmtpClient(); client.Credentials = new NetworkCredential("abc@gmail.com", "disha", "smtp.gmail.com"); client.Host = "smtp.gmail.com"; client.Port = 587; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.EnableSsl = true; client.UseDefaultCredentials = true; client.Send(msg); return RedirectToAction("About", "Home"); } return View(); } 

在这里我通过input的电子邮件地址从数据库中提取用户的密码。

查看代码

 <% using (Html.BeginForm("ForgotPassword", "Account", FormMethod.Post)) { %> <%: Html.LabelFor(m => m.user_email_address) %> <%: Html.TextBox("user_email_address")%> <%: Html.ValidationSummary(true) %> <input type="submit" value="Submit"/> <%} %> 

它给了我这些线上的错误

  client.Send(msg); 

错误信息是:

 The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Must issue a STARTTLS command first. x1sm1264662igc.16 

如何解决? 提前致谢

导入System.Net.Mail名称空间。

代码将如下所示:

 MailMessage mail = new MailMessage(); SmtpClient smtpServer = new SmtpClient("smtp.gmail.com"); smtpServer.Credentials = new System.Net.NetworkCredential("userName", "password"); smtpServer.Port = 587; // Gmail works on this port mail.From = new MailAddress("myemail@gmail.com"); mail.To.Add("recepient@gmail.com"); mail.Subject = "Password recovery"; mail.Body = "Recovering the password"; smtpServer.Send(mail); 

PS您在示例代码中有一个SQL注入漏洞。 使用带有参数而不是String.Format()SqlCommand对象。

使用SqlDataReader会更有效地检查logging而不是填充DataSet

看看MvcMailer

MvcMailer为您提供一个ActionMailer风格的电子邮件发送为ASP.NET MVC 3/4的NuGet包。 因此,您可以使用ViewBag制作由您的MVC母版页和视图组成的专业外观电子邮件。

你可以用这个…

  public void SendEmail(string address, string subject, string message) { string email = "-your-id-@gmail.com"; string password = "put-your-GMAIL-password-here"; var loginInfo = new NetworkCredential(email, password); var msg = new MailMessage(); var smtpClient = new SmtpClient("smtp.gmail.com", 587); msg.From = new MailAddress(email); msg.To.Add(new MailAddress(address)); msg.Subject = subject; msg.Body = message; msg.IsBodyHtml = true; smtpClient.EnableSsl = true; smtpClient.UseDefaultCredentials = false; smtpClient.Credentials = loginInfo; smtpClient.Send(msg); } 

我用这个发送电子邮件,在ASP.net MVC3

 System.Web.Helpers.WebMail.SmtpServer = smtp_server; System.Web.Helpers.WebMail.SmtpPort = smtp_port; System.Web.Helpers.WebMail.EnableSsl = true; System.Web.Helpers.WebMail.From = "fromaddress"; StringBuilder sb = new StringBuilder(); sb.Append("<table><tr><td>"); sb.Append(msg); sb.Append("</td></tr></table>"); string body = sb.ToString(); string To = toemail; System.Web.Helpers.WebMail.Send(To,subject, body); 
  Using Systems.Net.Mail; // POST: /Account/Register //Here's a simple Mail(MVC4) public async Task<ActionResult> Register(RegisterViewModel model) { Mail email= new Mail(); if (ModelState.IsValid) { var user = new ApplicationUser() { UserName = model.UserName, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { email.to = new MailAddress(model.Email); email.body = "Hello " + model.Firstname + " your account has been created <br/> Username: " + model.UserName + " <br/>Password: " + model.Password.ToString() + " <br/> change it on first loggin"; ViewBag.Feed = email.reg(); await SignInAsync(user, isPersistent: false); return RedirectToAction("Index", "Home"); } else { AddErrors(result); } } // If we got this far, something failed, redisplay form return View(model); } //Business Logic(this Is you Email Class) Using Systems.Net.Mail; public class Mail { public MailAddress to { get; set; } public MailAddress from { get; set; } public string sub { get; set; } public string body { get; set; } public string reg() { string feed = "Registration Successful"; var m = new System.Net.Mail.MailMessage() { Subject = "", Body = body, IsBodyHtml = true }; m.From = new MailAddress("Mxolisi@gmail.com ", "Administrator"); m.To.Add(to); SmtpClient smtp = new SmtpClient { Host = "pod51014.outlook.com", //Host = "smtp-mail.outlook.com", Port = 587, Credentials = new System.Net.NetworkCredential("Mxolisi@gmail.com ", " Dut324232"), EnableSsl = true }; try { smtp.Send(m); // feed = ""; } catch (Exception e) { } return feed; } public string fogot() { string feedback = ""; var m = new System.Net.Mail.MailMessage() { Subject = "Reset Password PIN", Body = body, IsBodyHtml = true }; m.From = new MailAddress("Mxolisi@gmail.com ", "Administrator"); m.To.Add(to); SmtpClient smtp = new SmtpClient { Host = "pod51014.outlook.com", Port = 587, Credentials = new System.Net.NetworkCredential("Mxolisi@gmail.com ", "Dut324232"), EnableSsl = true }; try { smtp.Send(m); feedback = "Check your email for PIN"; } catch (Exception e) { feedback = "Message not sent" + e.Message; } return feedback; } } } 

它看起来像你试图通过GMail的SMTP服务发送电子邮件,这个问题已经涵盖了: 通过Gmail在.NET中发送电子邮件

在你的代码中唯一看起来缺less的是你已经设置client.UseDefaultCredentials = true ,我想你想设置为false并提供自己的凭据。 我从来没有尝试过使用GMail发送电子邮件,但我猜你需要使用GMail帐户作为凭证才能正确authentication。

您应该打开Windows 7中的SMTP服务:

  • 请转到控制面板>程序
  • 点击“打开或closures窗口function”
  • 单击Internet信息服务,然后单击确定

当使用Gmail的Gmail,记得把

smtpClient.UseDefaultCredentials = false;

之前

 smtpClient.Credentials = loginInfo;