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

本文关键字:电子邮件 Mvc-3 net Asp | 更新日期: 2023-09-27 18:27:09

如何使用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", "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();
        }

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

查看代码。。

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

如何解决?提前感谢

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

导入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);

附言:示例代码中存在SQL注入漏洞。使用带参数的SqlCommand对象,而不是String.Format()

使用SqlDataReader将比填充DataSet更有效地检查记录。

查看MvcMailer

MvcMailer为您提供了ActionMailer风格的电子邮件发送NuGet Package for ASP.NET MVC 3/4。因此,您可以使用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服务发送电子邮件,这个SO问题已经涵盖了:通过GMail 在.NET中发送电子邮件

代码中唯一缺少的是您已经设置了client.UseDefaultCredentials = true,我认为您希望将其设置为false并提供自己的凭据。我从未尝试过使用GMail发送电子邮件,但我猜你需要使用GMail帐户作为凭据才能正确进行身份验证。

您应该在窗口7:中打开SMTP服务

  • 转到"控制面板">"程序"
  • 单击"打开或关闭窗口功能"
  • 单击"Internet信息服务",然后单击"确定"

当对gmail使用smtp时,请记住放置

smtpClient.UseDefaultCredentials = false;

之前

smtpClient.Credentials = loginInfo;