Để lưu trữ thông tin đăng kí nhận thư của người dùng ta chỉ cần lưu các thông tin như địa chỉthư điện tử của người dùng, tên, họ, định dạng thư nhận. Tất cả các
thông tin này có trong các bảng của module hồ sơ và thành viên ta hoàn toàn có
thể tận dụng.
Việc tạo và gửi thư điện tử của người dùng với vai trò là nhà quản trị có thể được
xây dựng sử dụng namespace System.Net.Mail (namespace này được định nghĩa trong thư viện System.dll) . Các lớp chính cho việc tạo và gửi thư là lớp
MailMessage, và lớp SmtpClient cung cấp các phương thức tạo và gửi thư bằng
việc kết nối với máy chủ SMTP đã được cấu hình.
Với lớp MailMessage ta có thể tạo toàn bộ thông tin đầy đủ của một thư điện tử như sau:
// create the message
MailMessage mail = new MailMessage(); // set the sender's address and display name
mail.From = new MailAddress("dangtienloc@gmail.com", "Loc Dang"); // add a first recipient by specifying only her address
mail.To.Add("doangquangminh@gmail.com");
// add a second recipient by specifying his address and display name
mail.To.Add(new MailAddress("nguyenducdan@gmail.com", "Dan nguyen")); // add a third recipient, but to the CC field this time
mail.CC.Add("mainga@gmail.com"); // set the mail's subject and HTML body mail.Subject = "Sample Mail";
mail.Body = "Hello, <b>my friend</b>!<br />How are you?"; mail.IsBodyHtml = true;
// set the mail’s priority to high mail.Priority = MailPriority.High; // add a couple of attachments mail.Attachments.Add(
new Attachment(@"c:\demo.zip", MediaTypeNames.Application.Octet)); mail.Attachments.Add(
Khi đối tượng MailMessage đã được tạo ta có thể gửi nó bằng phương thức Send
của lớp SmtpClient.
SmtpClient smtpClient = new SmtpClient(); smtpClient.Send(mail);
Trước khi có thể gọi phương thức Send ta cần thiết lập các thông tin cấu hình cho hệ thống để phương thức này có thể thực hiện được như địa chỉ của máy chủ
SMTP (thuộc tính SmtpClient Host) , cổng (thuộc tính port) và giấy chứng thực
của máy chủ này (thuộc tính credentials) , kết nối được mã hóa với SSL (thuộc
tính EnableSsl) và thời gian duy trì từ lúc bắt đầu cho tới khi kết thúc của việc gửi thư ( thuộc tính TimeOut , giá trị mặc định là 100 giây) . Một thuộc tính quan trọng
là DeliveryMethod (đây là thuộc tính liệt kê của kiểu dữ liệu SmtpDeliveryMethod. Nó có thể nhận một trong các giá trị sau:
Network: Thư được gửi thông qua kết nối trực tiếp tới một máy chủ Smtp cụ thể
PickupDirectoryFromIs: Thư điện tử này được chuẩn bị và tệp thư này được lưu
vào thư mục mặc định là <drive>:\Inetpub\mailroot\Queue. IIS sẽ lấy thư này từ hàng đợi thư để gửi.
SpecifedPickupDirectory: Các tệp EML với thư điện tử sẽ được gửi được lưu
vào thư mục được chỉ định cho thuộc tính này của đối tượng SmtpClient. Thiết lập
này sẽ hữu ích khi ta có một ứng dụng ngoài (không phải IIS) xử lí việc chọn thư
và gửi
Cấu hình phần gửi thư của hệ thống thương mại trực tuyến
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="dangtienloc@gmail.com">
<network defaultCredentials="true" host="MailServer" port="25"/> </smtp>
</mailSettings> </system.net>
Vấn đề thời gian trong xử lí gửi thư có thể là rất lâu khiến người dùng có thể nghĩ
hệ thống có lỗi. Việc gửi thư tới hàng ngàn khách hàng đăng kí nhận thư
(subscribers) thường phải mất hàng phút trong khi để xử lí một yêu cầu theo tiêu chuẩn chỉ nên trong vài giây.
Một giải pháp được đưa ra trong hệ thống đó là khi người dùng nhấn nút submit (tương đương với hành động gửi thư) thì ở phía máy chủ sẽ sinh ra một tiến trình xử lí nhiệm vụ gửi thư mất nhiều thời gian đó ở chế độ nền (backgroudn running
mode) và chuyển hướng người dùng về trang quản lí thư . Và ở trang đó người
dùng có thể thấy được trạng thái của tất cả các thư đã gửi trong đó có cả thư mới
tạo gần nhất và đang được gửi .
Để tránh việc phải có một nút refresh ở trang quản lí thư đó để biết được trạng thái thư mới gửi gần nhất ta sẽ sử dụng JQuery để yêu cầu dư liệu từ lớp điều khiển
$.ajax({
type: "GET",
url: "/Newsletter/UpdateStatus", dataType: "html",
sucess: function (result) { var domElement = $(result);
$("#Newsletter_Status_Table").replaceWith(domElement); }
});
Tạo các luồng tiến trình chạy nền – đa tiến trình
Các luồng tiến trình chạy nền hay luồng phụ được sử dụng để xử lí các nhiệm vụ
cần nhiều thời gian mà không ảnh hưởng tới tiến trình chính.
Với ASP.NET ta có thể tạo 250 tiến trình chạy cùng một thời điểm trên một CPU
Việc tạo mới một tiến trình không khó tuy nhiên ta phải quan tâm tới việc các tiến
trình có thể truy cập cùng lúc tới cùng một không gian nhớ. Để tạo tiến trình ta cần
namespace System.Threading trong thư viện mscorlib.dll . Dưới đây là một đoạn code tạo tiến trình phụ chạy nền
// create and start a background thread with some input parameters
object[] parameters = new object[]{"val1", 10, DateTime.Now};
ParameterizedThreadStart pts = new
ParameterizedThreadStart(ExecuteTask); Thread thread = new Thread(pts);
thread.Priority = ThreadPriority.BelowNormal; thread.Start(parameters);
// main thread goes ahead immediately …
// the method run asynchronously by the background thread
void ExecuteTask(object data) {
// extract the parameters from the input data object
object[] parameters = (object[])data;
string val1 = (string)parameters[0];
int val2 = (int)parameters[1];
DateTime val3 = (DateTime)parameters[2]; // execute time consuming processing here …
uc New sLetters Registered User (from Actors) Administrator (from Actors) Subscribe
Create New sletters
Edit New sletters Manage New sletters
Delete New sletters
«incl ude»
«i nclude»
4.3. Sơ đồ chức năng
Hình 3.11 – Sơ đồ chức năng của module