Cấp bậc tác giả:

DOTNET

Gửi lại mật khẩu thành viên qua Email với asp.net

Được viết bởi QuangIT ngày 13/08/2012 lúc 07:18 PM
Khi thành viên đăng ký trên trang web của bạn. Nhưng thành viên quyên mật khẩu họ sẽ có yêu cầu hệ thống gửi lại mật khẩu cho họ qua Email đã đăng ký. Bài viết này mình sẽ hướng dẫn các bạn thực hiện chức năng này.
  • 0
  • 11988

Gửi lại mật khẩu thành viên qua Email với asp.net

Khi thành viên đăng ký trên trang web của bạn. Nhưng thành viên quyên mật khẩu họ sẽ có yêu cầu hệ thống gửi lại mật khẩu cho họ qua Email đã đăng ký. Bài viết này mình sẽ hướng dẫn các bạn thực hiện chức năng này.

Giả sử bạn có bảng TB_ThanhVien có các trường cơ bản như sau: TenDangNhap, MatKhau, Email. Khi thành viên có yêu cầu gửi lại mật khẩu cho họ bạn cần xây dựng Form để họ nhập địa chỉ Email đã đăng ký. Form được xây dựng có các thành phần cơ bản như sau:

1. Xây dựng Form


<asp:RequiredFieldValidator id="RequiredFieldValidator4" runat="server" ControlToValidate="txtEmail" Display="Dynamic" Font-Size="8pt"> <br />
* Bạn chưa nhập email
</asp:RequiredFieldValidator> 
<asp:RegularExpressionValidator id="RegularExpressionValidator2" runat="server" ControlToValidate="txtEmail" Display="Dynamic" Font-Size="8pt" SetFocusOnError="True" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"> <br>
*Email chưa hợp lệ 
</asp:RegularExpressionValidator> 
<asp:TextBox id="txtEmail" runat="server" CssClass="textForm" Width="282px" /> 
<asp:Button id="btnGuiYeuCau" runat="server" OnClick="btnGuiYeuCau_Click" Text="Gửi yêu cầu" /> 

Form mình xây dựng như hình minh họa sau
Trong code bạn cần thực hiện các hàm sau:
2. Viết các hàm tạo mật khẩu ngẫu nhiên và hàm mã hóa mật khẩu
Bạn cần gửi mật khẩu cho thành viên bằng một chuỗi ngẫu nhiên được lấy từ tập các ký tự alphabet và các số.Hàm sau sẽ tạo hàm ngẫu nhiên với độ dài của chuỗi được truyền vào tham số, Và một hàm mã hóa chuỗi mật khẩu đó vì MatKhau trong Database bạn cần mã hóa nó

public string CreateLostPassword(int PasswordLength) 
string _allowedChars = "abcdefghijk0123456789mnopqrstuvwxyz"; 
Random randNum = new Random(); char[] chars = new char[PasswordLength]; 
int allowedCharCount = _allowedChars.Length; 
for (int i = 0; i < PasswordLength; i++) 
chars[i] = _allowedChars[(int)((_allowedChars.Length) * randNum.NextDouble())]; 
return new string(chars); 
public string MaHoaMatKhau(string password) 
UnicodeEncoding encoding = new UnicodeEncoding(); 
Byte[] hashBytes = encoding.GetBytes(password); // Compute the SHA-1 hash SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider(); 
Byte[] cryptPassword = sha1.ComputeHash(hashBytes); 
return BitConverter.ToString(cryptPassword); 
}
Tiếp theo bạn cần viết các hàm để đổi mật khẩu cho thành viên và hàm lấy TenDangNhap qua Email (Bạn phải đảm bảo Email là duy nhất - Có thể tạo bằng khóa Uniquy). 
3. Các hàm truy vấn và cập nhật mật khẩu

Ở đây mình viết bằng cách truy vấn trực tiếp trong câu lệnh. Bạn có thể sửa bằng cách viết các Store để thực hiện

private void CapNhatMatKhau(string TenDangNhap, string MatKhau) 
string connectString = @"Server =.\SQL2005;
Initial Catalog=DataBaseNamr;User ID=sa;Password=******"; 
string queryUpdate = @"UPDATE TB_ThanhVien SET MatKhau="+MatKhau+" WHERE TenDangNhap="+TenDangNhap; 
SqlConnection conn = new SqlConnection(connectString); 
try { conn.Open(); // Thực thi câu lệnh 
Update SqlCommand cmdInsert = new SqlCommand(queryUpdate, conn); cmdInsert.ExecuteNonQuery(); 
catch (SqlException ex) 
Console.WriteLine("Error: " + ex); 
finally { conn.Close(); 
private DataTable LayTenDangNhap(string Email) 
DataTable dtbTmp = new DataTable(); 
string connString = @"Server =.\SQL2005;Initial Catalog=DataBaseNamr;User ID=sa;Password=******"; 
string sql = @"SELECT TenDangNhap FROM TB_ThanhVien WHERE Email=" + Email; 
SqlConnection conn = new SqlConnection(connString); 
try { 
// Mở kết nối 
conn.Open(); 
SqlDataAdapter da = new SqlDataAdapter(sql, conn); 
DataSet ds = new DataSet(); 
da.Fill(ds, "DangNhap"); 
dtbTmp = ds.Tables[0]; 
catch (Exception e) 
Console.WriteLine(e.Message); 
finally 
// Đóng kết nối 
conn.Close(); 
return dtbTmp; 
Tiếp theo mình cần viết các hàm lấy nội dung và thực hiện trong sự kiện của nut "Gửi yêu cầu".

4. Các hàm lấy nội dung gửi mail và thực hiện sự kiện Click

Để thực hiện gửi mail mình sẽ dùng lớp System.Web.Mail. Và mình dùng Email mặc định để gửi mail làadmincnttvn@gmail.com (Bạn có thể thay bằng Mail của bạn) Các hàm được viết như sau:

private string NoiDungMail() 
string NoiDung = ""; 
DataTable dtb = LayTenDangNhap(txtEmail.Text + ""); 
string MatKhauMoi = "", TenDangNhap = ""; 
if (dtb.Rows.Count > 0) 
NoiDung = "Đây là Mail gửi đến từ website của Yourwebsite..<br>"; 
MatKhauMoi = CreateLostPassword(7); NoiDung += "Mật khẩu mới của bạn là: " + MatKhauMoi;
TenDangNhap = dtb.Rows[0]["TenDangNhap"]+""); 
DoiMatKhau(TenDangNhap, MaHoaMatKhau(MatKhauMoi)); 
NoiDung += "<br>Sau khi đăng nhập bạn nˆn đổi lại mật khẩu để tiện cho việc đăng nhập lần tiếp theo"; 
NoiDung += "<br><br><hr>Vui lòng không trả lời Mail này!"; 
return NoiDung; 
protected void btnGuiYeuCau_Click(object sender, EventArgs e) 
MailMessage objEmail = new MailMessage(); 
DataTable dtb = LayTenDangNhap(txtEmail.Text + ""); 
if (dtb.Rows.Count > 0) 
objEmail.To = txtEmail.Text + ""; 
objEmail.From = "admincnttvn@gmail.com"; 
objEmail.Subject = "Thông tin về mật khẩu của bạn"; 
objEmail.BodyEncoding = Encoding.UTF8; 
objEmail.Body = NoiDungMail(); 
objEmail.Priority = MailPriority.High; 
objEmail.BodyFormat = MailFormat.Html; 
try { SmtpMail.Send(objEmail); 
ScriptManager.RegisterStartupScript(this, this.GetType(), "redirectMe", "alert('Chúng tôi đã gửi mật khẩu cho bạn.\\n\\n Vui lòng check mail để lấy lại mật khẩu!');
location.href='LoginInfo.aspx';", true); 
catch (Exception exc) 
Response.Write("Send failure: " + exc.ToString()); 
else 
ScriptManager.RegisterStartupScript(this, this.GetType(), "redirectMe", "alert('Email của bạn chưa đăng ký!');", true); 
}
Trong hàm trên bạn thấy mình sử dụng hàm tạo mật khẩu CreateLostPassword(7) sẽ tạo cho Thành viên một mật khẩu mới có độ dài là 7 ký tự và các ký tự này được lấy ngấu nhiên trong dãy chữ và số.

Kết quả nhận được qua Email như sau:

Nguồn bài viết: hmweb

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML