Подтвердить что ты не робот

Как отправить электронную почту от Asp.net Mvc-3?

Как отправить почту через 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("[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]", "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();
        }

Здесь я выбрал пароль пользователя из базы данных через введенный адрес электронной почты..

Просмотреть код..

<% 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);

Ошибка messege:

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

Как его решить? заранее спасибо

4b9b3361

Ответ 1

Импортируйте пространство имен 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("[email protected]");
mail.To.Add("[email protected]");
mail.Subject = "Password recovery";
mail.Body = "Recovering the password";

smtpServer.Send(mail);

P.S. У вас есть уязвимость SQL-инъекции в примере кода. Используйте объект SqlCommand с параметрами вместо String.Format().

Использование SqlDataReader было бы намного более эффективным для проверки записи вместо заполнения DataSet.

Ответ 2

Посмотрите MvcMailer

MvcMailer предоставляет вам пошаговую инструкцию по отправке пакета NuGet для ASP.NET MVC 3/4. Таким образом, вы можете создавать профессионально выглядящие электронные письма, состоящие из ваших главных страниц MVC и представлений с помощью ViewBag.

Ответ 3

вы можете использовать это...

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

Ответ 4

Я использую это для отправки электронной почты в 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);

Ответ 5

    Using Systems.Net.Mail;
// POST: /Account/Register
//Here 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;

        }

    }
}

Ответ 7

Похоже, вы пытаетесь отправить электронные сообщения через SMTP-сервис GMail, который этот вопрос SO уже охватывает: Отправка электронной почты в .NET через Gmail

Единственное, что отсутствует в вашем коде, это то, что вы установили client.UseDefaultCredentials = true, я думаю, вы хотите установить это на false и предоставить свои собственные учетные данные. Я никогда не пробовал использовать GMail для отправки по электронной почте, но я предполагаю, что вам нужно будет использовать учетную запись GMail в качестве своих учетных данных для правильной аутентификации.

Ответ 8

Вы должны включить службу SMTP в окне 7:

  • перейдите в Панель управления > Программы
  • нажмите "Включить или отключить функции окна"
  • щелкните Информационная служба Интернета и нажмите OK

Ответ 9

при использовании smtp для gmail, помните, поставьте

smtpClient.UseDefaultCredentials = false;

перед

smtpClient.Credentials = loginInfo;