Comment envoyer un courrier via mvc-3 asp.net en utilisant c #?
Je dois envoyer un mot de passe oublié alors comment puis-je faire cela? 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 string user_login_name { get; set; }
public string user_password { get; set; }
[Required]
[Display(Name="Email Address : ")]
public string user_email_address { get; set; }
}
}
Code du contrôleur ..
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("[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 base de données via l'adresse email saisie.
Voir le code ..
<% 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"/>
<%} %>
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);
P.S. Vous avez une vulnérabilité d'injection SQL dans l'exemple de code. Utilisez un objet SqlCommand
avec des paramètres au lieu de String.Format()
.
Utiliser SqlDataReader
serait beaucoup plus efficace pour rechercher un enregistrement plutôt que de renseigner une DataSet
.
Regardez 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(string address, string subject, string message)
{
string email = "[email protected]";
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);
}
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("[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 string fogot()
{
string 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;
}
}
}
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";
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);
Utilisez le code de lien suivant pour envoyer un email dans mvc3:
On dirait que vous essayez d'envoyer des courriels via le service SMTP de GMail, ce que cette SO question 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 envoyer des courriels, 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:
lorsque vous utilisez smtp pour gmail, rappelez-vous de mettre
smtpClient.UseDefaultCredentials = false;
avant
smtpClient.Credentials = loginInfo;