Diễn đàn lập trình viên .NET
Trang chủ       Thành viên    Lịch    Ai đang online
Chào mừng khách ( Đăng nhập | Đăng ký )
        


12»»

Gửi Email động trong ASP.NET Nới rộng / Co lại
Tác giả
Tin nhắn
Đả gửi Tuesday, September 23, 2008 3:24 AM


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

Nhóm: Administrators
Lần đăng nhập cuối: Thursday, December 10, 2009 12:30 AM
Đả gửi: 1,016, Thăm: 2,863
Gửi Email động trong ASP.NET

Giới thiệu.
Với 1 ứng dụng web hiện nay thì việc hổ trợ liên hệ giửa khách hàng và nhà cung cấp dịch vụ là không thể tránh khỏi, với cách làm củ thì các bạn phải dùng cách cấu hình Microsoft CDO trong Net 1.1, cách này rất vất vả và bất tiện, nhưng với asp.net 2.0 thì mọi việc trở nên hết sức dể dàng.

Nội dung:
Trong bài giới thiệu này mình sẻ cố gắng giải thích cô động và xúc tích, đọc xong bài này các bạn sẻ có thể làm được:

1. Tạo 1 email template mẫu có sẳn.
2. Cấu hình smtp.
3. Lấy địa chỉ email từ file web.config.
4. Bật chức năng bảo mật cho email gửi đi. (enable SSL)

Nếu các bạn muốn thì hiểu rỏ hơn về Mail cũng như các lớp cung cấp phục vụ cho việc gửi mail, xin vui lòng tham khảo thêm MCTS Self-Paced Training Kit (Exam 70-536): Microsoft .NET Framework 2.0 Application Development Foundation, chương 15 (cơ bản về .NET 2.0).

Cách làm:

Bước 1:
Dùng Visual Studio 2005/2008 tạo 1 ứng dụng Web, chọn ngôn ngữ mà bạn thích, ở đây mình code trên 2 ngôn ngữ VB và C#, đầu tiên mình sẻ tạo 1 template mẫu phục vụ cho việc gửi mail.



Bước 2:
Và mail template có dạng sau:



Và đây là code html của mail mẫu



Giờ khoang hả quan tâm đến các từ trong dấu [], chẳng hạn [Sender], nó chính là các tham số mà ta sẻ thay thế.

Bước 3:
Tiếp đến tạo 1 trang để cho người dùng gửi yêu cầu, nơi mà chúng ta sẻ áp dụng chức năng send mail:



Các này dể thiết kế nên mình không có đi sâu vào vấn đề làm thế nào để layout nó, ở đây mình dùng table.

Bước 4:
Giờ đến phần cấu hình smtp trong web.config, mục đích cho phép người dùng dể dàng chỉnh sửa email gửi đi 1 cách dể dàng mà không cần đụng đến mã nguồn.



Ở đây do mình dùng host của godaddy nên cấu hình smtp yêu cầu là như hình trên, nếu smtp của các bạn là gmail hoặc yahoo thì phải cấu hình cho đúng, ví dụ: của gmail là stmp.gmail.com, port là 587. Ở đây mình cấu hình smtp trên domain của mình đang sử dụng (http://www.vi-vn.com).

Chú ý: tag smtp phải đặt trong tag configuration và được bộc lại bởi tag system.net

Típ: Các bạn nên bỏ nó phía dưới cùng trong tag configuration

Bước 5: tạo 1 thuộc tính để lấy giá trị email trong web.config

C#

VB.NET


Chú ý: thuộc tính này chỉ đọc thôi, không cho phép ghi xuống cho nên chỉ có get C#, và ReaOnly trong VB.

Chú ý: các bạn phải using hoặc import 2 namespace vào là:

C#
using System.Net.Configuration;
using System.Configuration;

VB
Imports System.Configuration
Imports System.Net.Configuration

Với thuộc tính này chúng ta sẻ lấy được địa chi email: admin@vi-vn.com

Bước 6: Viết hàm send mail

Hàm này sẻ trả về kiểu String, dùng để nhận biết kết quả của việc send mail (thành công hay thất bại), bạn cũng có thể trả về kiểu bool nếu bạn thích.

C#
public string SendMail(string subject, string body,
string to, bool isHtml, bool isSSL)

VB
Public Function SendMail(ByVal subject As String, ByVal body As String, _
ByVal toAddress As String, ByVal isHtml As Boolean, ByVal isSSL As Boolean) _
As String
C#


VB.NET


Phương thức send mail này sẻ nhận vào các tham số như: chủ đề, nội dụng, người nhận, gửi mail dạng html, mã hoá SSL (Secure Socket Layer).

Đầu tiên hàm này sẻ tạo 1 đối tượng MailMessage, và được bộc lại bởi block using, để đảm bảo rằng đối tượng này sẻ được Dispose khi ra khỏi hàm và trước khi Collect Garbage thực hiện việc này. Như những dòng lệnh của đả nói lên rằng là 1 mail bao gồm người gửi (From), người nhận (To), chủ đề (Subject), nội dụng (Body)...

Bước 7: Gọi hàm SendMail.

C#

VB.NET



Đầu tiên chúng ta tạo 1 đối tượng StreamReader và đọc nội dụng của file html tempate, sau đó đọc tất cả nội dụng của file template vào biến content. Sau đó thay thế các tag [Sender], [Content].... bằng những gì mà người dùng nhập vào.



Kết quả:


Kết luân:

Đây là cách làm thông thường khi lằm việc với mail, ngoài ra khi send mail, chúng ta cần phải nhúng vào đó hình hoặc tập tin đính kèm chắng hạn. Điều này cũng rất dể dàng vì ASP.NET 2.0 đả hổ trợ chúng ta. Tương tự với cách làm này thì khi người dùng đăng ký thành viên thì rất dể dàng cho việc send mail active tài khoản, cũng dùng cách này trong các bài viết sau mình sẻ hướng dẩn send mail active tài khoản khi user đăng ký thành viên.

Mã nguồn:
http://www.vi-vn.com/pubs/Articles/DynamicEmail.rar

Hope this help,
QuachNguyen



Diễn đàn lập trình viên .NET
Bài viết thứ #188
Đả gửi Saturday, September 19, 2009 1:58 AM
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

Nhóm: Forum Members
Lần đăng nhập cuối: Tuesday, November 10, 2009 4:34 PM
Đả gửi: 10, Thăm: 20
SmtpClient smtp = new SmtpClient();

smtp.Host = "smtp.gmail.com";

smtp.Credentials = new System.Net.NetworkCredential("aaaaaa", "bbbbbb");

smtp.EnableSsl = true;

smtp.Send(msg);

Lúc mình chạy thì nó bắt lỗi trên

catch (Exception) là : "The remote certificate is invalid according to the validation procedure."

Mong bạn giúp đỡ. Cám ơn



hailua
Bài viết thứ #1569
Đả gửi Saturday, September 19, 2009 11:50 AM


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

Nhóm: Administrators
Lần đăng nhập cuối: Thursday, December 10, 2009 12:30 AM
Đả gửi: 1,016, Thăm: 2,863
hailuavitinh (9/19/2009)
SmtpClient smtp = new SmtpClient();

smtp.Host =
"smtp.gmail.com";

smtp.Credentials =
new System.Net.NetworkCredential("aaaaaa", "bbbbbb");

smtp.EnableSsl =
true;

smtp.Send(msg);

Lúc mình chạy thì nó bắtlỗitrên

catch (Exception) là :"The remote certificate is invalid according to the validation procedure."

Mong bạn giúp đỡ. Cám ơn


Thêm đoạn code này nửa nhé:
_SmtpClient.Credentials = _Credentials;



Diễn đàn lập trình viên .NET
Bài viết thứ #1570
Đả gửi Sunday, September 20, 2009 7:41 PM
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

Nhóm: Forum Members
Lần đăng nhập cuối: Tuesday, November 10, 2009 4:34 PM
Đả gửi: 10, Thăm: 20
_Credentials cái đó là biến mà phải ko?

cái mà bạn gửi cho mình thì nó đã gán cho nó rồi:

smtp.Credentilas=new System.Net.NetworkCredential("aaaaaaa","bbbbbbb");

hailua

Bài viết thứ #1575
Đả gửi Sunday, September 20, 2009 9:21 PM


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

Nhóm: Administrators
Lần đăng nhập cuối: Thursday, December 10, 2009 12:30 AM
Đả gửi: 1,016, Thăm: 2,863
hailuavitinh (9/20/2009)
_Credentials cái đó là biến mà phải ko?

cái mà bạn gửi cho mình thì nó đã gán cho nó rồi:

smtp.Credentilas=new System.Net.NetworkCredential("aaaaaaa","bbbbbbb");


SmtpClient _SmtpClient = new SmtpClient("smtp.gmail.com");
NetworkCredential _Credentials = new NetworkCredential(MAILUSER, MAILPASSWORD);

_SmtpClient.Credentials = _Credentials;




Diễn đàn lập trình viên .NET
Bài viết thứ #1576
Đả gửi Monday, December 14, 2009 10:34 PM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Nhóm: Forum Members
Lần đăng nhập cuối: Wednesday, May 12, 2010 12:08 PM
Đả gửi: 1, Thăm: 8
Sao em dung VS 2005 viết trên C # thay các giá trị như trong hướng dẫn mà chạy trên localhost catch nó báo : "Failure sending mail. "
Có thể hướng dẫn cho em ko
Bài viết thứ #1826
Đả gửi Sunday, March 14, 2010 4:39 AM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Nhóm: Forum Members
Lần đăng nhập cuối: Sunday, March 14, 2010 4:37 AM
Đả gửi: 1, Thăm: 2
Phần Attach file đính kèm em chưa làm được. Anh Bill Gate hướng dẫn cách tạo đối tượng để nhúng file đính kèm trong Mail nhé. Em dùng FileBrowsers để Upload load lên Host sau đó lấy path của nó nhưng chưa được.

Nha Trang in my mind & my soul. I'll back to...
Bài viết thứ #1895
Đả gửi Wednesday, April 07, 2010 5:52 AM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Nhóm: Forum Members
Lần đăng nhập cuối: Wednesday, April 07, 2010 9:39 AM
Đả gửi: 1, Thăm: 9
Onlymyself90 (12/14/2009)
Sao em dung VS 2005 viết trên C # thay các giá trị như trong hướng dẫn mà chạy trên localhost catch nó báo : "Failure sending mail. "
Có thể hướng dẫn cho em ko

Mình thì up lên host rồi nhưng cũng như bạn bị cái "Failure sending mail. " không biết tại sao, email của mình là lienhe@gachmenanhhong.com mail này tích hợp gmail.mình config như thế này ai coi dùm help với:

Web.Config:

<system.net>
<mailSettings>
<smtp>
<network host="stmp.gmail.com"
port="587"
userName=lienhe@gachmenanhhong.com
password="Bí mật"/>
</smtp>
</mailSettings>
</system.net>
</configuration>

trong site lienhe.aspx.cs:

public static String FormAddress

{
get
{
SmtpSection cfg = (SmtpSection)ConfigurationManager.GetSection
("system.net/mailSettings/smtp");
return cfg.Network.UserName;
}
}
public string SendMail(string subject, string body,
string to, bool isHtml, bool isSSL)
{
try
{
using (MailMessage mail = new MailMessage())
{
mail.From = new MailAddress(FormAddress, "gachmenanhhong.com");
mail.To.Add(to);
mail.Subject = subject;
mail.Body = body;
mail.IsBodyHtml = isHtml;
SmtpClient client = new SmtpClient();
client.EnableSsl = isSSL;
client.Send(mail);
}
}
catch (SmtpException ex)
{
return ex.Message;
}
return "Send email successful!";
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btgui_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(Server.MapPath("Templates/Contact.htm"));
sr = File.OpenText(Server.MapPath("Templates/Contact.htm"));
string content = sr.ReadToEnd();
content = content.Replace("[Sender]", txtname.Text.Trim());
content = content.Replace("[Add]", txtdiachi.Text);
content = content.Replace("[Mobile]", txtdienthoai.Text);
content = content.Replace("[Email]", txtmail.Text);
content = content.Replace("[Content]", txtnoidung.Text);
content = content.Replace("[DateTime]", DateTime.Now.ToShortDateString());
try
{
Response.Write(SendMail("Lin h khch hng",
content, txtmail.Text.Trim(), true, false));
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}

Bài viết thứ #1943
Đả gửi Thursday, June 03, 2010 1:51 PM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Nhóm: Forum Members
Lần đăng nhập cuối: Thursday, June 03, 2010 2:04 PM
Đả gửi: 2, Thăm: 2
Ai giúp mình với, mình làm y như hướng dẫn rồi, chạy cũng ko báo lỗi gì nhưng đến lúc bấm send cũng bị như bạn trên là báo "Failure send email"
Bài viết thứ #1993
Đả gửi Thursday, June 03, 2010 2:08 PM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Nhóm: Forum Members
Lần đăng nhập cuối: Thursday, June 03, 2010 2:04 PM
Đả gửi: 2, Thăm: 2
sr mình ko cố ý spam nhưng sao nhấn vào nút edit ko đc: mình sửa đc lỗi trên nhưng giờ nó lại ra lỗi này:
"The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at "
đã enable ssl= true

Bài viết thứ #1994
« Chủ đề trước | Chủ đề kế »

12»»

Đang đọc chủ đề này Nới rộng / Co lại
Thành viên đang họat động: 0 (0 Các khách, 0 thành viên, 0 thành viên ẩn danh)
Không có thành viên nào hiện tại xem chủ đề này.
Diễn đàn Mod: Admin, Bill_Gates

All times are GMT +7:00, Bây giờ là 10:29pm

Powered by InstantForum.NET v4.1.4 © 2010
Sự thực thi: 0.156. 9 queries. Vô hiện hoá chức năng nén.
Tin học bình dân Free download ebook, wordpress theme. Seo tips, domain hosting review. And much more...