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

C# 如何从Asp.net Mvc-3发送电子邮件?,c#,asp.net,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc 3,如何使用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

如何使用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"/>

   <%} %>
错误消息是:

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
如何解决?
提前感谢

导入
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
检查记录比填充
数据集要高效得多

MvcMailer为您提供了一个ActionMailer风格的电子邮件发送包,用于ASP.NET MVC 3/4。因此,您可以使用ViewBag生成由MVC母版页和视图组成的外观专业的电子邮件


使用以下链接中的代码在mvc3中发送电子邮件:


在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);
System.Web.Helpers.WebMail.SmtpServer=smtp\U服务器;
System.Web.Helpers.WebMail.SmtpPort=smtp\u端口;
System.Web.Helpers.WebMail.EnableSsl=true;
System.Web.Helpers.WebMail.From=“fromaddress”;
StringBuilder sb=新的StringBuilder();
某人加上(“”);
某人附加(味精);
某人加上(“”);
字符串体=sb.ToString();
字符串To=toemail;
System.Web.Helpers.WebMail.Send(收件人、主题、正文);

看起来您正试图通过GMail的SMTP服务发送电子邮件,这个问题已经涉及到:


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

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

  • 转到控制面板>程序
  • 单击“打开或关闭窗口功能”
  • 单击Internet信息服务,然后单击确定
    • 您可以使用此

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

      当使用smtp发送gmail时,请记住

      smtpClient.UseDefaultCredentials=false

      以前

      smtpClient.Credentials = loginInfo;
      
      使用Systems.Net.Mail;
      //职位:/Account/Register
      //这是一封简单的邮件(MVC4)
      公共异步任务寄存器(RegisterViewModel模型)
      {
      邮件=新邮件();
      if(ModelState.IsValid)
      {
      var user=new ApplicationUser(){UserName=model.UserName,Email=model.Email};
      var result=await UserManager.CreateAsync(用户、模型、密码);
      if(result.successed)
      {
      email.to=新邮件地址(model.email);
      email.body=“Hello”+model.Firstname+“您的帐户已创建
      用户名:“+model.Username+”
      密码:“+model.Password.ToString()+”
      在第一次登录时更改它”; ViewBag.Feed=email.reg(); 等待信号同步(用户,ispersist:false); 返回重定向到操作(“索引”、“主页”); } 其他的 { 加法器(结果); } } //如果我们走到这一步,有些东西失败了,重新显示形式 返回视图(模型); } //业务逻辑(这是您的电子邮件类) 使用Systems.Net.Mail; 公营邮件 { 发送到{get;set;}的公共邮件地址 来自{get;set;}的公共邮件地址 公共字符串sub{get;set;} 公共字符串体{get;set;} 公共字符串reg() { string feed=“注册成功”; var m=new System.Net.Mail.MailMessage() { 主题=”, 身体, IsBodyHtml=true }; m、 发件人=新的邮件地址(“Mxolisi@gmail.com“,”管理人“); m、 加入,加入; SmtpClient smtp=新SmtpClient { Host=“pod51014.outlook.com”, //Host=“smtp mail.outlook.com”, 端口=587, 凭据=新系统.Net.NetworkCredential(“Mxolisi@gmail.com“,”Dut324232“, EnableSsl=true }; 尝试 { smtp.Send(m); //feed=“”; } 捕获(例外e) { } 回馈; } 公共字符串fogot() { 字符串反馈=”; var m=new System.Net.Mail.MailMessage() { Subject=“重置密码PIN”, 身体, IsBodyHtml=true }; m、 发件人=新的邮件地址(“Mxolisi@gmail.com“,”管理人“); m、 加入,加入; SmtpClient smtp=新SmtpClient { Host=“pod51014.outlook.com”, 端口=587, 凭据=新系统.Net.NetworkCredential(“Mxolisi@gmail.com“,”Dut324232“, EnableSsl=true }; 尝试 { smtp.Send(m); 反馈=“检查您的电子邮件以获取PIN”; } 捕获(例外e) { 反馈=“消息未发送”+e.消息; } 反馈; } } }
      <代码>请考虑不要发送恢复密码。你应该提供一个链接来重置网站上的密码。是的,你应该将密码存储在
      smtpClient.Credentials = loginInfo;
      
          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;
      
              }
      
          }
      }