Quantcast Gửi Email động trong ASP.NET

Gửi Email động trong ASP.NET

by Neon Quach 3. May 2009 23:25

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.

<system.net>

      <mailSettings>

    <smtp>

      <network host="smtp.gmail.com" port="587" userName="quachngochoangnguyen@gmail.com" password="your password"/>

    </smtp>

      </mailSettings>

</system.net>


Ở đâ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

    Public Shared ReadOnly Property FormAddress() As String

        Get

            Dim cfg As SmtpSection = ConfigurationManager.GetSection("system.net/mailSettings/smtp")

            Return cfg.Network.UserName

        End Get

    End Property
C#

    public static String FormAddress

    {

        get

        {

            SmtpSection cfg = (SmtpSection)ConfigurationManager.GetSection

                ("system.net/mailSettings/smtp");

            return cfg.Network.UserName;

        }

    }



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.Configuration;

using System.Net.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#

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

    {

        try

        {

            using (MailMessage mail = new MailMessage())

            {

                mail.From = new MailAddress(FormAddress, "VI-VN.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!";

    }



VB.NET

    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

        Try

            Using mail As New MailMessage

                mail.From = New MailAddress(FormAddress, "VI-VN.COM")

                mail.To.Add(toAddress)

                mail.Subject = subject

                mail.Body = body

                mail.IsBodyHtml = isHtml

                Dim client As SmtpClient = New SmtpClient()

                client.EnableSsl = isSSL

                client.Send(mail)

            End Using

        Catch ex As SmtpException

            Return ex.Message

        End Try

        Return "Send email successful!"

    End Function

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#

    protected void ButtonSend_Click(object sender, EventArgs e)

    {

        StreamReader sr = new StreamReader(Server.MapPath("template/Contact.htm"));

        sr = File.OpenText(Server.MapPath("template/Contact.htm"));

        string content = sr.ReadToEnd();

        content = content.Replace("[Sender]", TextBoxName.Text.Trim());

        content = content.Replace("[Email]", TextBoxEmail.Text);

        content = content.Replace("[Content]", TextBoxContent.Text);

        content = content.Replace("[DateTime]", DateTime.Now.ToShortDateString());

        try

        {

            Response.Write(SendMail("Liên hệ khách hàng", content, TextBoxEmail.Text.Trim(), true, false));

        }

        catch (Exception ex)

        {

            Response.Write(ex.Message);

        }

    }

VB.NET

    Protected Sub ButtonSend_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonSend.Click

        Dim sr As StreamReader = New StreamReader(Server.MapPath("template/Contact.htm"))

        sr = File.OpenText(Server.MapPath("template/Contact.htm"))

        Dim content As String = sr.ReadToEnd()

        content = content.Replace("[Sender]", TextBoxName.Text.Trim())

        content = content.Replace("[Email]", TextBoxEmail.Text)

        content = content.Replace("[Content]", TextBoxContent.Text)

        content = content.Replace("[DateTime]", DateTime.Now.ToShortDateString())

        Try

            Response.Write(SendMail("Liên hệ khách hàng", content,TextBoxEmail.Text.Trim(), True, False))

        Catch ex As Exception

            Response.Write(ex.Message)

        End Try

    End Sub



Đầ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:

sending-dynamic-email-in-aspnet.rar (6.04 kb)

Tags: , , ,


Categories: asp.net | c# | vb.net

blog comments powered by Disqus

About me

I'm  currently employed as Software developer at devinition.com and also a Microsoft Certified Technology Specialist (MCTS), Microsoft Certified Professional Developer (MCPD) in Net Framework 2.0 and 3.5: Web Applications and MCTS .NET Framework 3.5, ADO.NET Applications

Powered by BlogEngine.NET 2.5.0.5 - Eco Theme by n3o Web Designers