Helpex - Trao đổi & giúp đỡ Đăng nhập
36

Làm cách nào để gửi thư qua mvc-3 asp.net bằng c #?

Tôi phải gửi một mật khẩu quên mật khẩu, vậy làm thế nào tôi có thể làm điều này? Mã của tôi ở dưới đây.

Mã mẫu ..

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

Mã bộ điều khiển ..

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

Ở đây tôi đã tìm nạp mật khẩu của người dùng từ cơ sở dữ liệu thông qua địa chỉ email đã nhập ..

Xem mã ..

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

   <%} %>

Nó cho tôi một lỗi trên dòng này

 client.Send(msg);

Thông báo lỗi là:

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

Làm thế nào để giải quyết nó? cảm ơn trước

36 hữu ích 3 bình luận 69k xem chia sẻ
69

Nhập System.Net.Mailkhông gian tên.

Mã sẽ trông tương tự như sau:

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

PS Bạn có một lỗ hổng SQL injection trong mã mẫu. Sử dụng một SqlCommandđối tượng với các tham số thay vì String.Format().

Sử dụng SqlDataReadersẽ hiệu quả hơn rất nhiều để kiểm tra một bản ghi thay vì điền một DataSet.

69 hữu ích 5 bình luận chia sẻ
16

Hãy xem MvcMailer

MvcMailer cung cấp cho bạn một email kiểu ActionMailer gửi Gói NuGet cho ASP.NET MVC 3/4. Vì vậy, bạn có thể tạo ra các email trông chuyên nghiệp bao gồm các trang và chế độ xem MVC của bạn với ViewBag.

16 hữu ích 0 bình luận chia sẻ
10

bạn có thể sử dụng cái này ...

    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);
    }
10 hữu ích 0 bình luận chia sẻ
1

tôi đang sử dụng cái này để gửi email, trong 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);
1 hữu ích 0 bình luận chia sẻ
1
    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;

        }

    }
}
1 hữu ích 0 bình luận chia sẻ
0
0 hữu ích 0 bình luận chia sẻ
0

Có vẻ như bạn đang cố gắng gửi email thông qua dịch vụ SMTP của GMail, mà câu hỏi SO này đã bao gồm: Gửi email trong .NET qua Gmail

Điều duy nhất có vẻ còn thiếu trong mã của bạn là bạn đã đặt client.UseDefaultCredentials = true, tôi nghĩ bạn muốn đặt điều này thành falsevà cung cấp thông tin đăng nhập của riêng bạn. Tôi chưa bao giờ thử sử dụng GMail để gửi email, nhưng tôi đoán bạn sẽ cần sử dụng tài khoản GMail làm thông tin đăng nhập của mình để xác thực đúng cách.

0 hữu ích 0 bình luận chia sẻ
0

Bạn nên bật dịch vụ SMTP trong Window 7:

  • đi tới Bảng điều khiển> Chương trình
  • nhấp vào "BẬT hoặc TẮT các tính năng của cửa sổ"
  • bấm Dịch vụ Thông tin Internet và bấm OK
0 hữu ích 1 bình luận chia sẻ
0

khi sử dụng smtp cho gmail, hãy nhớ đặt

smtpClient.UseDefaultCredentials = false;

trước

smtpClient.Credentials = loginInfo;
0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# asp.net asp.net-mvc-3 , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading