Cấu Hình SQL Server Để Gửi Mail

Vũ Huy Tâm

Bài này nói về cách gửi email trong SQL Server bằng chức năng Database Mail. Chức năng cũ SQL Mail không còn được hỗ trợ nữa.
Việc đầu tiên là bạn cần bật chức năng Database Mail, bằng đoạn code sau:

SP_CONFIGURE 'show advanced options', 1;
GO
RECONFIGURE;
GO
SP_CONFIGURE 'Database Mail XPs', 1;
GO
RECONFIGURE
GO

Sau đó trong Management Studio, bạn mở rộng node Management và click đúp vào “Database Mail”, cửa sổ wizard sẽ hiện ra như hình dưới:

Bạn để nguyên mặc định lựa chọn đầu tiên và click next, cửa sổ mới sẽ hiện ra:

Bạn nhập vào tên profile và click vào nút “Add” để tạo mail account. Trong Database Mail có hai khái niệm là account và profile. Account là tài khoản dùng để kết nối tới mail server, còn profile là “hồ sơ” mail trong đó bạn có thể gắn với một hoặc vài account. Sau khi ấn vào nút “Add” và ở cửa sổ tiếp theo ấn vào nút “New account…”, bạn sẽ đến màn hình tạo account:

Ở mục account name, bạn đánh tên account bạn muốn dùng. Ở mục email address, bạn nhập vào địa chỉ email dùng cho account. Địa chỉ email không nhất thiết phải tồn tại, ví dụ trong trường hợp bạn không muốn nhận lại các reply email. Server name bạn nhập vào mail server trong mạng công ty của bạn, và port để nguyên 25. SMTP Authentication bạn để mặc định là “Anonymous authentication”. Sau đó click “finish” để quay lại cửa sổ trước và cửa sổ sẽ đóng lại. Bạn click next để chuyển đến màn hình “Managing profile security”, bạn check vào hộp public cho profile “DBA Support”. Sau đó click next và finish. Quá trình setup như vậy là xong, để gửi email bạn dùng thủ tục dbo.sp_send_dbmail trong msdb database:

EXEC  msdb.dbo.sp_send_dbmail
	@profile_name = 'DBA Support', --Tên profile tạo ở trên
	@recipients =  'vuht2000@yahoo.com;vuht2000@sqlviet.com', --list các địa chỉ nhận
	@body =  'this is test', --nội dung email
	@body_format = 'HTML', --format html hay text
	@subject = 'test email'; --tiêu đề

Nếu mọi việc xuôn xẻ bạn sẽ nhận được email từ DBA Support. Bạn có thể theo dõi các email được gửi đi bằng cách truy vấn bảng dbo.sysmail_mailitems trong msdb database:

SELECT *
FROM msdb.dbo.sysmail_mailitems

Lưu ý là sp_send_dbmail chỉ gửi mail vào hàng đợi để chuyển tới mail server, ngoài ra nó không theo dõi mail có được gửi đi thành công hay không. Trong trường hợp có trục trặc (sau một hồi bạn không nhận được mail), bạn truy vấn bảng dbo.sysmail_log cũng trong msdb database và xem cột description để biết nguyên nhân:

SELECT * 
FROM msdb.dbo.sysmail_log
WHERE mailitem_id = 5 --thay 5 bằng mail item id bạn đang muốn tìm nguyên nhân

Lỗi phổ biến nhất là nhập sai tên mail server khi tạo mail account, hoặc SQL Server không kết nối được tới mail server do firewall.




Tags: , ,

0 Comments
Posted on 18/8/2014 | Categories: Database Administration

Các bài viết tương tự

Leave a Reply

Hướng dẫn: Để nhập mã T-SQL bạn dùng thẻ <pre lang="tsql"> và </pre>.
Ví dụ: <pre lang="tsql">SELECT * FROM MyTable</pre>