Comment envoyer un email depuis Asp.net Mvc-3?

Comment envoyer un courrier via mvc-3 asp.net en utilisant c #?

Je dois envoyer un mot de passe oublié, comment puis-je le faire? Mon code est ci-dessous.

Code de modèle ..

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 ssortingng user_login_name { get; set; } public ssortingng user_password { get; set; } [Required] [Display(Name="Email Address : ")] public ssortingng user_email_address { get; set; } } } 

Code du contrôleur ..

  public ActionResult ForgotPassword() { return View(); } [HttpPost] public ActionResult ForgotPassword(ssortingng 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(); ssortingng strQuery = ssortingng.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("[email protected]"); msg.To.Add(user_email_address); msg.Subject = "Password"; msg.Body = "Test1"; msg.Priority = MailPriority.High; SmtpClient client = new SmtpClient(); client.Credentials = new NetworkCredential("[email protected]", "dip", "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(); } 

Ici, j’ai récupéré le mot de passe de l’utilisateur de la firebase database via l’adresse e-mail entrée.

Voir le code ..

   m.user_email_address) %>     

Cela me donne une erreur sur ces lignes

  client.Send(msg); 

Erreur messege est:

 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 

Comment le résoudre? Merci d’avance

Importez l’espace de noms System.Net.Mail .

Le code ressemblera à ceci:

 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("[email protected]"); mail.To.Add("[email protected]"); mail.Subject = "Password recovery"; mail.Body = "Recovering the password"; smtpServer.Send(mail); 

PS Vous avez une vulnérabilité d’injection SQL dans l’exemple de code. Utilisez un object SqlCommand avec des parameters au lieu de Ssortingng.Format() .

L’utilisation de SqlDataReader serait beaucoup plus efficace pour rechercher un enregistrement au lieu de DataSet un DataSet .

Jetez un coup d’œil à MvcMailer

MvcMailer vous fournit un email de style ActionMailer envoyant un package NuGet pour ASP.NET MVC 3/4. Ainsi, vous pouvez produire des emails de qualité professionnelle composés de vos pages maîtres et vues de MVC avec ViewBag.

vous pouvez utiliser ceci …

  public void SendEmail(ssortingng address, ssortingng subject, ssortingng message) { ssortingng email = "[email protected]"; ssortingng 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); } 

J’utilise ceci pour envoyer des emails, en 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"; SsortingngBuilder sb = new SsortingngBuilder(); sb.Append("
"); sb.Append(msg); sb.Append("
"); ssortingng body = sb.ToSsortingng(); ssortingng 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 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 
Username: " + model.UserName + "
Password: " + model.Password.ToSsortingng() + "
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 ssortingng sub { get; set; } public ssortingng body { get; set; } public ssortingng reg() { ssortingng feed = "Registration Successful"; var m = new System.Net.Mail.MailMessage() { Subject = "", Body = body, IsBodyHtml = true }; m.From = new MailAddress("[email protected] ", "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("[email protected] ", " Dut324232"), EnableSsl = true }; try { smtp.Send(m); // feed = ""; } catch (Exception e) { } return feed; } public ssortingng fogot() { ssortingng feedback = ""; var m = new System.Net.Mail.MailMessage() { Subject = "Reset Password PIN", Body = body, IsBodyHtml = true }; m.From = new MailAddress("[email protected] ", "Administrator"); m.To.Add(to); SmtpClient smtp = new SmtpClient { Host = "pod51014.outlook.com", Port = 587, Credentials = new System.Net.NetworkCredential("[email protected] ", "Dut324232"), EnableSsl = true }; try { smtp.Send(m); feedback = "Check your email for PIN"; } catch (Exception e) { feedback = "Message not sent" + e.Message; } return feedback; } } }

On dirait que vous essayez d’envoyer des emails via le service SMTP de GMail, ce que cette question SO couvre déjà: Envoi d’e-mails au format .NET via Gmail

La seule chose qui semble manquer dans votre code est que vous avez défini client.UseDefaultCredentials = true , je pense que vous souhaitez définir ceci sur false et fournir vos propres informations d’identification. Je n’ai jamais essayé d’utiliser GMail pour l’envoi d’e-mails, mais je suppose que vous devrez utiliser un compte GMail comme identifiant afin de vous authentifier correctement.

Vous devez activer le service SMTP dans Windows 7:

  • allez dans le Panneau de configuration> Programmes
  • cliquez sur “Activer ou désactiver les fonctionnalités de la fenêtre”
  • Cliquez sur Internet Information Service, puis sur OK.

lorsque vous utilisez smtp pour gmail, rappelez-vous de mettre

smtpClient.UseDefaultCredentials = false;

avant

 smtpClient.Credentials = loginInfo;