web-dev-qa-db-fra.com

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

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

36
Dip

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.

69
Dmitry S.

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.

16
Dhaust

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);
    }
10
Yasser
    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;

        }

    }
}
1
Sqalo

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);
0
ankit rajput

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.

0
Peter Monks

Vous devez activer le service SMTP dans Windows 7:

  • allez dans 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.
0
Arslan Sunny

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

smtpClient.UseDefaultCredentials = false;

avant

smtpClient.Credentials = loginInfo;
0
Pham