Dịch vụ SMTP: Một giải pháp gửi e-mail đơn giản và hiệu quả

Hiện nay, việc sử dụng e-mail để trao đổi thông tin cá nhân hay phục vụ công việc kinh doanh là một việc làm hết sức cần thiết. Có thể bạn có một hộp thư điện tử được đăng ký từ một nhà cung cấp dịch vụ hay một hộp thư miễn phí trên nền Web, nhưng đã bao giờ bạn gửi thư đi mà không cần phải nhờ đến một phần mềm gửi nhận mail nào hay chưa? Chúng tôi muốn nói đến dịch vụ SMTP (Simple Mail Transfer Protocol) có sẵn trong Windows 2000 và có cả trong Windows XP và Windows Server 2003.

Để gửi thư đi bạn chỉ cần soạn một tệp văn bản (text) theo một cấu trúc định sẵn (bằng chương trình Notepad chẳng hạn), sau đó bạn copy tệp này vào thư mục Root:\Inetpub\mailroot\Pickup, ngay tức thì dịch vụ SMTP sẽ tự động chuyển thư đi mà không cần phải nhờ đến một hộp thư điện tử được đăng ký từ một nhà cung cấp dịch vụ và cũng không cần đến một phần mềm gửi nhận thư như Outlook Express chẳng hạn. Đây mới chỉ là một tính năng hữu ích của dịch vụ. Lợi ích chính của nó nằm ở chỗ, những người lập trình dựa vào dịch vụ này để có thể viết những chương trình gửi thư mang tính đặc thù nhằm phục vụ công việc kinh doanh của họ. Lấy ví dụ trong công ty chúng tôi - một công ty truyền thông hàng đầu trong nước - cứ mỗi tháng bộ phận tính cước phải gửi số liệu cho gần 30 tỉnh thành trên toàn miền Bắc. Người thao tác hệ thống phải gửi đi ít nhất khoảng 30 thư điện tử với tiêu đề thư và nội dung như nhau có thêm tệp tính cước đính kèm riêng cho từng tỉnh thành. Chưa tính đến sự cố thư không đến được nơi nhận vì một lý do nào đó như lỗi hệ thống hay đường truyền bị nghẽn và lúc đó phải gửi vài lần nữa để đảm bảo việc gửi số liệu cước không bị chậm. Giải pháp duy nhất cho vấn đề này là tự viết một chương trình gửi mail tự động phù hợp với yêu cầu của công việc và giảm bớt phức tạp cho người thao tác hệ thống. Và đương nhiên chương trình này phải dựa trên dịch vụ SMTP mà chúng tôi muốn giới thiệu và điều quan trọng là dịch vụ này có sẵn trong các hệ điều hành Windows mà chúng ta vẫn quen sử dụng.

Hãy lưu ý rằng bài viết sẽ không giới thiệu mã nguồn một chương trình gửi thư thông qua dịch vụ SMTP (phần này chúng tôi sẽ đề cập vào một dịp khác) mà chỉ tập trung thảo luận những lợi ích của việc sử dụng dịch vụ SMTP được cung cấp bởi IIS (Internet Information Services) trong Windows 2000 để gửi thư đi. Ngoài ra, một số cấu hình và thử nghiệm của dịch vụ, cụ thể được cung cấp bởi IIS trong Windows 2000, cũng được xem xét. Dịch vụ SMTP trong Windows XP và Windows Server 2003 cũng giống như trong Windows 2000, các bạn có thể tự cấu hình và thử nghiệm một cách dễ dàng.

Tóm lại, do những yêu cầu gửi thư điện tử được xử lý rất đơn giản thông qua SMTP và bảo đảm việc sử dụng máy chủ e-mail bên ngoài từ nhà cung cấp dịch vụ Internet hoặc máy chủ e-mail của riêng mình hoặc sử dụng một hệ thống e-mail đầy đủ tính năng như Microsoft Exchange Server. Trong khi một hệ thống e-mail với đầy đủ tính năng có thể cung cấp các dịch vụ để xử lý các thông báo e-mail cả đi và đến, thì dịch vụ SMTP trong Windows 2000 được xem như một giải pháp hiệu quả và kinh tế (vì nó có sẵn hệ điều hành) cho những nơi chỉ cần gửi thông báo e-mail đi chứ không nhận. Tuy nhiên, trước hết chúng ta hãy đưa ra một cách giải thích ngắn gọn để có thể hiểu một SMTP hoạt động như thế nào.

Cách thức hoạt động của một SMTP

SMTP (Simple Mail Transfer Protocol) là một trong các giao thức Internet nòng cốt được thiết kế để chuyển e-mail một cách tin cậy và hiệu quả. ý tưởng đằng sau SMTP tương đối đơn giản. Một người dùng hay ứng dụng gửi một thông báo bao gồm địa chỉ e-mail người nhận, ví dụ ‘ten-nguoi-nhan@ten-cong-ty.com’, cùng với chủ đề (subject) và nội dung của thông báo.

Việc gửi thông báo được bắt đầu bằng việc chuyển thông báo đến một SMTP Server chỉ định. Dựa vào tên miền của địa chỉ e-mail nhận (ví dụ, ‘ten-cong-ty.com’), SMTP Server bắt đầu trao đổi liên lạc với một DNS Server (máy chủ hệ thống tên miền) mà sẽ tìm kiếm và trả về tên (host name) của SMTP Server đích (ví dụ ‘mail.ten-cong-ty.com’) cho tên miền đó. Cuối cùng, SMTP Server đầu tiên trao đổi thông tin trực tiếp với SMTP Server đích thông qua cổng 25 của TCP/IP. Nếu tên người dùng của địa chỉ e-mail nhận khớp với một trong những tài khoản người dùng được phép trong máy chủ đích, thông báo e-mail gốc cuối cùng sẽ được chuyển đến máy chủ này, chờ người nhận lấy thông báo thông qua một chương trình gửi nhận mail như Microsoft Outlook chẳng hạn.

Trong trường hợp SMTP Server đầu tiên không thể trao đổi thông tin trực tiếp với máy chủ đích, giao thức SMTP cung cấp các cơ chế để chuyển các thông báo thông qua một hay nhiều SMTP Server chuyển tiếp trung gian. Một máy chủ chuyển tiếp sẽ nhận thông báo gốc và sau đó thử chuyển nó tới máy chủ đích hay gửi nó một lần nữa tới một máy chủ chuyển tiếp khác. Quá trình này sẽ được lặp lại cho đến khi thông báo được chuyển đi hoặc thời gian lưu giữ thông báo hết hạn.

Cài đặt SMTP trong Windows 2000


Bắt đầu với các phiên bản trước đó của Microsoft Windows NT, dịch vụ SMTP đã được cài đặt như một phần trong IIS. Do dịch vụ SMTP chủ yếu được sử dụng trong một số ứng dụng để xử lý một số lượng e-mail gửi đi tương đối nhỏ cho nên không nhất thiết phải dành riêng một máy tính để phục vụ nhiệm vụ này. Kinh nghiệm cho thấy chúng ta nên cài đặt dịch vụ SMTP vào trong một máy chủ có kết nối với mạng Internet bên ngoài. Và sau đây là những thủ tục cần thiết để chúng ta có thể cài đặt dịch vụ SMTP.

Cài đặt Dịch vụ SMTP

1. Từ trình đơn Start, trỏ vào Settings/Control Panel. Kích đúp vào Add/Remove Programs và sau đó kích vào Add/Remove Windows Components.
2. Trong cửa sổ Windows Components Wizard, chọn Internet Information Services (IIS) và sau đó nhấn Details. Chọn thành phần SMTP Service và nhấn OK.

Chú ý
: Một vài thành phần IIS khác được yêu cầu để hỗ trợ SMTP service như các thành phần Internet Information Services Snap-In, World Wide Web Server và Common Files. Những thành phần này tự động được lựa chọn và cài đặt cùng với thành phần SMTP Service.

Cấu hình dịch vụ SMTP

Nếu dịch vụ SMTP được cài đặt trên một máy chủ với một kết nối mạng Internet và tường lửa ngăn chặn Internet không chặn cổng 25 của lưu lượng SMTP, thì các thiết lập mặc định của dịch vụ SMTP đã sẵn sàng để chuyển đi bất cứ thông báo e-mail nào đang chờ để được gửi. Tuy nhiên, vẫn còn có một số thiết lập về bảo mật mà bạn có thể đang cân nhắc cho SMTP Server của bạn. Bạn có thể thay đổi phần lớn thiết lập này thông qua công cụ quản trị Internet Services Manager.

Để khởi động công cụ quản trị Internet Services Manager

1. Từ trình đơn Start, hãy đến Programs\Administrative Tools.
2. Nhấn Internet Services Manager để khởi tạo trình quản trị.

Để cài đặt ‘server logging’

1. Từ ô bên trái của hộp thoại Internet Information Services, mở cây thư mục. Kích chuột phải vào Default SMTP Virtual Server và chọn Properties.
2. Trong hộp thoại Properties, nhấn thẻ General. Đánh dấu hộp kiểm tra enable logging. Thuộc tính này theo mặc định không được chọn.
3. Chọn định dạng log-file mà bạn ưa thích (giá trị mặc định ở đây là W3C Extended Log File Format).
4. Kích vào nút Properties bên phải hộp thả xuống định dạng log-file.
5. Điều chỉnh lịch thời gian tên cho log file rollover nếu thấy cần thiết.
6. Kích vào thẻ Extended Properties.
7. Chọn bất kỳ mục nào mà bạn quan tâm và nhấn OK.

Chú ý: Để giới hạn kích thước của log-file, bạn không cần thiết phải chọn quá nhiều nội dung trong mục này. Đây là một số nội dung mà bạn nên chọn như Date, Time, Client IP Address, User Name, Service Name, Method, Bytes Sent và Bytes Received.

Để cài đặt điều khiển truy nhập

1. Trong hộp thoại Properties, kích vào thẻ Access. Kích vào nút Relay để điều khiển máy tính nào có thể chuyển tiếp các thông báo e-mail đến SMTP Server.
2. Trong hộp thoại Relay Restrictions, kích vào nút Add.
3. Trong hộp thoại Computer, gõ địa chỉ IP của máy tính được phép chuyển tiếp e-mail qua SMTP Server. Kích vào nút OK để thực hiện những thay đổi này.

Ghi chú
: Nếu một thông báo được gửi đến SMTP Server từ cùng máy đó, thì thiết lập mặc định cho chức năng Relay Restrictions sẽ hoạt động tốt, không có vấn đề gì. Tuy nhiên, nếu thông báo được gửi từ một máy khác, bạn sẽ phải thêm địa chỉ IP hoặc tên miền của máy này vào danh sách được phép trong cửa sổ Relay Restrictions để Relay có thể hoạt động.

Chỉ ra Smart Host cho việc chuyển tiếp


Nếu SMTP Server của bạn đứng đằng sau một tường lửa có khả năng ngăn chặn bất cứ lưu lượng SMTP trực tiếp nào (thông qua cổng 25), bạn sẽ phải tìm ra nếu có một Smart Host (tạm gọi là máy chủ thông minh) trong mạng của bạn được phép chuyển tiếp tất cả các thông báo SMTP ra ngoài Internet.

Về cơ bản, một Smart Host có thể chỉ là một SMTP Server khác được cho phép để chuyển tiếp các thông báo e-mail đi, từ các SMTP Server nội bộ khác, trực tiếp vào Internet. Vì vậy, một Smart Host phải có khả năng kết nối đồng thời với cả hai mạng nội bộ và Internet cốt để có thể hoạt động như một cổng thư điện tử (e-mail gateway). Và một khi bạn đã xác định được một Smart Host trong mạng của bạn, bạn có thể bắt đầu cài đặt SMTP Server.

Cài đặt SMTP Server

1. Trong hộp thoại Properties, kích vào thẻ Delivery và sau đó nhấn vào nút Advanced để mở hộp thoại Advanced Delivery.
2. Trong trường Smart host, gõ tên miền đủ tư cách của một Smart Host trong mạng của bạn. Bạn cũng có thể gõ địa chỉ IP của Smart Host nằm trong dấu ngoặc vuông, ví dụ như [10.146.32.1]. Dấu [] sẽ hỗ trợ để tăng tốc quá trình tìm kiếm DNS.
3. Kích vào nút OK để thực hiện những thay đổi này.

Kiểm tra lại sự hoạt động của dịch vụ SMTP

Có một số cách để chúng ta có thể kiểm tra lại xem dịch vụ SMTP có hoạt động đúng cách hay không.

a) Kiểm tra với một phần mềm gửi nhận mail: Đầu tiên, bạn có thể chọn để sử dụng một chương trình gửi nhận mail Internet chuẩn như Microsoft Outlook Express để kiểm tra nhanh. Mở Outlook Express, kích vào lệnh trình đơn Tools/Accounts… Hộp thoại Internet Accounts hiện ra, chọn tên tài khoản hộp thư, nhấn nút Properties, hộp thoại Properties của tài khoản hộp thư hiện ra, chọn thẻ Servers, trong mục Outgoing mail (SMTP) gõ tên miền của SMTP Server mới. Hãy gửi một thông báo thử nghiệm đến địa chỉ e-mail hợp thức nào đó và kiểm tra xem nó có tới nơi hay không.

b) Kiểm tra với thư mục Pickup: Hay bạn có thể gửi một tệp e-mail bằng text đơn giản dựa vào mô tả SMTP trong RFC 822. Và đây là nội dung của một tệp text đơn giản được tạo ra trong “Notepad” :

From: TenNguoiGui @TenMienNguoiGui.com
To:
TenNguoiNhan@TenMienNguoiNhan.com
Subject: Thu Nghiem
Day la phan noi dung cua e-mai thu nghiem.


Sau khi gõ xong bạn lưu tệp này vào một thư mục nào đó. Sau đó bạn chỉ việc sao chép hoặc di chuyển tệp này vào trong thư mục Pickup nơi SMTP được cài đặt (đường dẫn thư mục mặc định sẽ là "root:\Inetpub\mailroot\Pickup"). SMTP Service sẽ định kỳ kiểm tra trong thư mục Pickup này và sẽ tìm cách để chuyển đi bất kỳ thông báo nào được tìm thấy trong thư mục này. Sau đó bạn hãy kiểm tra xem trong hộp thư đích thông báo e-mail đã được gửi đến chưa. Thông tin chi tiết về mô tả định dạng cho thông báo e-mail trong RFC 822, bạn có thể tham khảo tại địa chỉ http://Msdn.microsoft.com/library/Psdk/cdosys/cdosys_the_rfc_822_mes sage_format.htm.

Kiểm tra bằng CDO

Một cách khác để kiểm tra dịch vụ SMTP là viết một VBScript có sử dụng CDO (Collaboration Data Objects) của Windows 2000.

CDO trong Windows 2000 (là CDO 2.0 hay Cdosys.dll) là một bộ các thành phần cộng tác được thiết kế nhằm đơn giản hoá việc tạo hay vận dụng các thông báo trên Internet. Thay vì phải viết một đoạn mã của chính mình để truyền thông tin SMTP, những người phát triển có thể sử dụng CDO để gửi và nhận các thông báo có sử dụng các giao thức SMTP cũng như thông qua thư mục Pickup cục bộ. Đây là VBScript ví dụ về CDO có thể được dùng để gửi đi một thông báo thông qua dịch vụ SMTP:

set msg = WScript.CreateObject("CDO.Message")
msg.From = "TenNguoiGui@TenMienNguoiGui.com"
msg.To = "TenNguoiNhan@TenMienNguoiNhan.com"
msg.Subject = "Thu nghiem"
msg.TextBody = "Day la phan noi dung cua e-mai thu nghiem."
msg.Configuration.Fields("http://schemas.microsoft.com/cdo/
configuration/smtpserver") = "smtpserver.TenMienNguoiGui.com"
msg.Configuration.Fields("http://schemas.microsoft.com/cdo/
configuration/sendusing") = 2
msg.Configuration.Fields.Update
msg.Send


• Năm dòng đầu tiên trong đoạn mã ví dụ tạo ra đối tượng CDO và chỉ ra những thông tin cần thiết cho một thông báo.
• Hai dòng mã tiếp theo sử dụng đối tượng CDO Configuration để cài đặt các giá trị của các trường cho những thiết lập cấu hình khác nhau. Mỗi trường bao gồm 2 phần: một tiền tố Namespace (như "http://schemas.microsoft.com/cdo/configuration/") và một tên cục bộ (như "smtpserver").
• Cơ chế này được dựa trên các Namespace W3C (World Wide Web Consortium) trong khuyến cáo XML (http://www.w3c.org/TR/REC-xml-names/) và được sử dụng chủ yếu để cung cấp sự giống nhau và tính tương thích với những phiên bản liên quan khác của các thành phần CDO.
• Trường "smtpserver" chỉ ra tên miền (hay địa chỉ IP) của SMTP Server, trong khi trường "sendusing" chỉ rõ việc gửi thông báo là sử dụng thư mục Drop của dịch vụ SMTP cục bộ, hoặc đến một SMTP Server trực tiếp qua mạng. Trường cuối cùng được gán một giá trị bằng 2, ý nói việc gửi thông báo đến SMTP Server được chỉ định qua mạng.
• Hai dòng mã cuối cùng cập nhật những thiết lập cấu hình và bắt đầu chuyển giao thông báo.

Phương pháp sử dụng các thành phần CDO này có lẽ quá phức tạp để có thể kiểm tra dịch vụ SMTP. Tuy nhiên, Script này tỏ ra hữu ích cho một số nhiệm vụ quản trị hệ thống khác. Ví dụ, Script này có thể được sử dụng bên trong chương trình Performance Logs and Alerts cho thông báo e-mail khi các máy đếm hệ thống nào đó vượt quá xa các ngưỡng của chúng được chỉ định.

Ngoài ra các bạn cũng có thể sử dụng các ngôn ngữ như C#, VB.NET và ASP.NET trong môi trường .NET để thiết kế những chương trình ứng dụng trên Windows hay Web để gửi thư đi nhờ vào dịch vụ này như vấn đề đã được nêu lên trong công ty chúng tôi. Thực tế chúng tôi đã hoàn thành chương trình và đã đưa vào sử dụng. Qua việc phải xử lý vấn đề nêu ra mới thấy dịch vụ SMTP hiệu quả như thế nào cho những chương trình gửi mail chuyên biệt. Khi chạy chương trình, chúng tôi chỉ cần gõ vào một số tham số cần thiết như tiêu đề thư, nội dung thư (là chung nhau cho tất cả các bức thư) và chỉ cần một thao tác kích chuột là khoảng 30 bức thư được tạo ra và chuyển đi một cách tự động. Tất nhiên trong quá trình xử lý các tệp tin đính kèm đã được nén lại và tên tệp tin được đặt theo mã tỉnh thành được lưu giữ trong một CSDL cùng với những địa chỉ người gửi và người nhận.

Nhận biết việc gửi bị lỗi

Nếu một thông báo e-mail không thể được gửi đi vì một lý do nào đó (ví dụ, tên người dùng hoặc địa chỉ e-mail sai), thì nó sẽ được chuyển vào thư mục Badmail. Theo mặc định, vị trí của của thư mục Badmail phải như sau: "Root:\Inetpub\mailroot\Badmail". Hãy kiểm tra nội dung của các e-mail bị từ chối và tìm ra bất cứ các thông báo lỗi cụ thể nào. Hãy sửa các lỗi đó nếu có thể và gửi lại thông báo một lần nữa bằng một trong những cách gửi đi được mô tả ở trên.
Ngoài thư mục Badmail ra, một thông báo e-mail cũng có thể được lưu giữ trong thư mục Queue với một chu kỳ thời gian định trước. Các giá trị cài đặt này có thể được xác định bằng việc điều chỉnh mục “outbound retry intervals” trong thẻ “Delivery” của hộp thoại “Default SMTP Virtual Server Properties”. Nếu một thông báo không thể được gửi đi ngay lập tức bởi vì kết nối mạng đang bận hoặc dừng, thông báo được cất giữ trong thư mục Queue này và được gửi lại theo những khoảng thời gian định trước. Nếu SMTP từ bỏ sau vài lần gửi không thành công, thì cuối cùng thông báo sẽ được chuyển vào thư mục Badmail.

Kết luận

Dịch vụ SMTP được cung cấp trong “Internet Information Services” của Windows 2000 (cả Windows XP và Windows Server 2003) là một thành phần đơn giản, nhưng hữu ích để có thể chuyển những thông báo e-mail đi một cách hiệu quả và kinh tế. Nó tiết kiệm cho những nhà quản trị hệ thống từ việc phải thiết lập một hệ thống thư tín phức tạp để truyền những thông báo e-mail trên Internet một cách đáng tin cậy. Khi được sử dụng với CDO cho Windows 2000, các nhà thiết kế có thể thực hiện gửi đi các thông báo e-mail thông qua SMTP mà không cần phải viết nhiều mã chương trình.

Hoàng Linh
(TTVTQT KV-1)

Thứ Hai, 03/10/2005 11:52
31 👨 13.934
0 Bình luận
Sắp xếp theo