Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách gửi email từ SQL Server (T-SQL)

SQL Server cung cấp khả năng gửi email thông qua giải pháp Thư cơ sở dữ liệu của nó.

Hành động gửi thư thực tế được thực hiện với sp_send_dbmail thủ tục được lưu trữ. Nhưng trước khi bắt đầu gửi email từ SQL Server, bạn cần kích hoạt và cấu hình Database Mail.

Bạn có thể thực hiện việc này với SSMS GUI hoặc T-SQL.

Bài viết này trình bày cách thực hiện với T-SQL. Nó giả định rằng Database Mail chưa bao giờ được kích hoạt trên hệ thống của bạn và do đó nó sẽ thực hiện các bước liên quan để kích hoạt nó.

Nếu bạn thích sử dụng SSMS GUI, hãy xem Cách thiết lập Thư cơ sở dữ liệu trong SQL Server (SSMS).

Bước 1:Bật XP của Thư cơ sở dữ liệu

Điều đầu tiên bạn cần làm trước khi gửi bất kỳ thư nào từ SQL Server là kích hoạt các thủ tục lưu trữ mở rộng Database Mail (Database Mail XPs). Đây là trong msdb cơ sở dữ liệu hệ thống.

Điều này cũng yêu cầu "hiển thị các tùy chọn nâng cao" được bật.

Chúng bị tắt theo mặc định. Vì vậy, nếu bạn chưa bao giờ sử dụng Thư cơ sở dữ liệu trên hệ thống của mình trước đây, thì bạn cần phải bật chúng.

Dưới đây là cách bật các tùy chọn nâng cao và XP của Cơ sở dữ liệu Thư:

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

Không cần khởi động lại SQL Server. Giờ đây, các XP của Database Mail sẽ có sẵn để sử dụng.

Microsoft thực sự khuyến nghị rằng các tùy chọn nâng cao như tùy chọn này chỉ nên được thay đổi bởi quản trị viên cơ sở dữ liệu có kinh nghiệm hoặc kỹ thuật viên SQL Server được chứng nhận, nhưng với mục đích của bài viết này, tôi sẽ cho rằng bạn là quản trị viên DB có kinh nghiệm đang làm mới bộ nhớ của mình 😉

Trong mọi trường hợp, để thực thi sp_configure với cả hai tham số để thay đổi tùy chọn cấu hình hoặc chạy RECONFIGURE tuyên bố, bạn phải được cấp ALTER SETTINGS quyền cấp máy chủ. ALTER SETTINGS quyền được nắm giữ ngầm bởi sysadmin serveradmin vai trò máy chủ cố định.

Bước 2:Tạo Tài khoản Thư &Hồ sơ

Cơ sở dữ liệu Thư được gửi qua một hồ sơ, thay vì một tài khoản người dùng trực tiếp.

Để gửi email bằng Thư cơ sở dữ liệu, bạn cần tạo tài khoản Thư cơ sở dữ liệu, cấu hình Thư cơ sở dữ liệu, thêm tài khoản vào hồ sơ, rồi cấp cho người dùng quyền truy cập vào hồ sơ đó. Người dùng cần sử dụng msdb cơ sở dữ liệu.

Mã T-SQL để thực hiện việc này có thể trông giống như sau:

-- Switch to the msdb database
USE msdb;

-- Create a user on the msdb database
CREATE USER Marge FOR LOGIN Marge;

-- Create a Database Mail account  
EXECUTE msdb.dbo.sysmail_add_account_sp  
    @account_name = 'DB Admin',  
    @description = 'Mail account for admin emails.',  
    @email_address = '[email protected]',  
    @replyto_address = '[email protected]',  
    @display_name = 'DB Automated Mailer',  
    @mailserver_name = 'smtp.example.com',
    @port = 25;  
  
-- Create a Database Mail profile  
EXECUTE msdb.dbo.sysmail_add_profile_sp  
    @profile_name = 'DB Admin Profile',  
    @description = 'Profile for admin emails.';  
  
-- Add the account to the profile  
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp  
    @profile_name = 'DB Admin Profile',  
    @account_name = 'DB Admin',  
    @sequence_number = 1;
  
-- Grant the msdb user access to the Database Mail profile
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
    @profile_name = 'DB Admin Profile',
    @principal_name = 'Marge',
    @is_default = 1;

Bạn sẽ cần phải thay thế các chi tiết khác nhau bằng của riêng bạn. Điều này cũng giả định rằng bạn chỉ định một máy chủ thư hoạt động và bạn sử dụng đúng cổng.

Lưu ý rằng tôi đã có thông tin đăng nhập có tên Marge trên máy chủ của mình. Tại đây, tôi đã tạo một người dùng trên msdb cơ sở dữ liệu cho đăng nhập đó. Sau đó, trong phần cuối cùng, tôi đã cấp cho người dùng đó quyền truy cập vào hồ sơ mà tôi vừa tạo.

Trong ví dụ này, tôi đã tạo một tài khoản Thư cơ sở dữ liệu và thêm nó vào hồ sơ. Bạn có thể thêm nhiều tài khoản vào một hồ sơ nếu muốn. Điều này có thể hữu ích như một chuyển đổi dự phòng khi gửi thư. Nếu tài khoản đầu tiên bị lỗi, nó sẽ thử tài khoản tiếp theo và tài khoản tiếp theo, v.v.

Sau khi có mã trên (với các chi tiết của riêng bạn), bạn sẽ có thể gửi thư.

Bước 3:Gửi thư

Như đã đề cập, việc gửi thư thực sự được thực hiện với sp_send_dbmail thủ tục được lưu trữ.

Đây là một ví dụ:

EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Your favorite SQL Server Agent job just failed',  
    @subject = 'SQL Server Agent Job: FAILED';

Đây là một email đơn giản với những thông tin cơ bản như người nhận, dòng tiêu đề, nội dung email, v.v.

Nếu bạn không chỉ định hồ sơ, quy trình sẽ sử dụng hồ sơ riêng tư mặc định cho người dùng hiện tại. Nếu không có hồ sơ riêng tư mặc định cho người dùng, nó sẽ sử dụng hồ sơ công khai mặc định cho msdb cơ sở dữ liệu. Nếu không có hồ sơ công khai mặc định, bạn sẽ gặp lỗi.

Tùy chọn khác

sp_send_dbmail thủ tục chấp nhận nhiều đối số hơn những gì tôi đã sử dụng trong ví dụ này.

Đây là cú pháp chính thức cho sp_send_dbmail thủ tục:

sp_send_dbmail [ [ @profile_name = ] 'profile_name' ]  
    [ , [ @recipients = ] 'recipients [ ; ...n ]' ]  
    [ , [ @copy_recipients = ] 'copy_recipient [ ; ...n ]' ]  
    [ , [ @blind_copy_recipients = ] 'blind_copy_recipient [ ; ...n ]' ]  
    [ , [ @from_address = ] 'from_address' ]  
    [ , [ @reply_to = ] 'reply_to' ]   
    [ , [ @subject = ] 'subject' ]   
    [ , [ @body = ] 'body' ]   
    [ , [ @body_format = ] 'body_format' ]  
    [ , [ @importance = ] 'importance' ]  
    [ , [ @sensitivity = ] 'sensitivity' ]  
    [ , [ @file_attachments = ] 'attachment [ ; ...n ]' ]  
    [ , [ @query = ] 'query' ]  
    [ , [ @execute_query_database = ] 'execute_query_database' ]  
    [ , [ @attach_query_result_as_file = ] attach_query_result_as_file ]  
    [ , [ @query_attachment_filename = ] query_attachment_filename ]  
    [ , [ @query_result_header = ] query_result_header ]  
    [ , [ @query_result_width = ] query_result_width ]  
    [ , [ @query_result_separator = ] 'query_result_separator' ]  
    [ , [ @exclude_query_output = ] exclude_query_output ]  
    [ , [ @append_query_error = ] append_query_error ]  
    [ , [ @query_no_truncate = ] query_no_truncate ]   
    [ , [ @query_result_no_padding = ] @query_result_no_padding ]   
    [ , [ @mailitem_id = ] mailitem_id ] [ OUTPUT ]

Xem tài liệu của Microsoft để biết giải thích chi tiết về từng đối số.

Tham chiếu thư cơ sở dữ liệu

Xem Hướng dẫn Cơ sở dữ liệu Thư để có danh sách đầy đủ các hướng dẫn Thư Cơ sở dữ liệu. Đây có thể là một tài liệu tham khảo tuyệt vời, vì mỗi hướng dẫn đề cập đến một phần cụ thể của Thư cơ sở dữ liệu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi ‘smalldatetime’ thành ‘date’ trong SQL Server (Ví dụ T-SQL)

  2. T-SQL có hàm tổng hợp để nối các chuỗi không?

  3. Hết thời gian truy vấn từ ứng dụng web nhưng chạy tốt từ studio quản lý

  4. Truy xuất dữ liệu từ quy trình được lưu trữ có nhiều bộ kết quả

  5. Tại sao truyền từ float sang varchar được làm tròn trong SQL Server?