Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wysyłać wiadomości e-mail z serwera SQL (T-SQL)

SQL Server zapewnia możliwość wysyłania wiadomości e-mail za pośrednictwem rozwiązania Database Mail.

Faktyczna czynność wysyłania poczty odbywa się za pomocą sp_send_dbmail procedura składowana. Ale zanim zaczniesz wysyłać wiadomości e-mail z SQL Server, musisz włączyć i skonfigurować pocztę bazy danych.

Możesz to zrobić za pomocą GUI SSMS lub T-SQL.

W tym artykule pokazano, jak to zrobić za pomocą T-SQL. Zakłada, że ​​poczta bazy danych nigdy nie została włączona w twoim systemie, dlatego przechodzi przez kroki związane z jej włączeniem.

Jeśli wolisz korzystać z GUI SSMS, zobacz Jak skonfigurować pocztę bazy danych w SQL Server (SSMS).

Krok 1:Włącz system XP poczty bazy danych

Pierwszą rzeczą, którą musisz zrobić przed wysłaniem jakiejkolwiek poczty z SQL Server, jest włączenie rozszerzonych procedur składowanych Database Mail (Database Mail XP). Są w msdb baza danych systemu.

Wymaga to również włączenia opcji „pokaż opcje zaawansowane”.

Są one domyślnie wyłączone. Więc jeśli nigdy wcześniej nie korzystałeś z poczty bazy danych w swoim systemie, musisz je włączyć.

Oto jak włączyć zaawansowane opcje i bazy danych XPs Mail:

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

Nie ma potrzeby ponownego uruchamiania SQL Server. Powinny być teraz dostępne pakiety Database Mail XP.

Microsoft faktycznie zaleca, aby zaawansowane opcje, takie jak ta, były zmieniane tylko przez doświadczonego administratora bazy danych lub certyfikowanego technika SQL Server, ale na potrzeby tego artykułu założę, że jesteś doświadczonym administratorem bazy danych, który odświeża pamięć 😉

W każdym razie, aby wykonać sp_configure z obydwoma parametrami, aby zmienić opcję konfiguracji lub uruchomić RECONFIGURE oświadczenie, musisz otrzymać ALTER SETTINGS uprawnienia na poziomie serwera. ALTER SETTINGS pozwolenie jest domyślnie posiadane przez sysadmina i serweradmin stałe role serwera.

Krok 2:Utwórz konto pocztowe i profil

Poczta bazy danych jest wysyłana za pośrednictwem profilu, a nie bezpośrednio z konta użytkownika.

Aby wysłać wiadomość e-mail za pomocą poczty bazy danych, musisz utworzyć konto poczty bazy danych, profil poczty bazy danych, dodać konto do profilu, a następnie przyznać użytkownikowi dostęp do tego profilu. Użytkownik musi być w msdb baza danych.

Kod T-SQL do tego może wyglądać mniej więcej tak:

-- 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ędziesz musiał zastąpić różne szczegóły własnymi. Zakłada się również, że określisz działający serwer pocztowy i używasz prawidłowego portu.

Zauważ, że miałem już login o nazwie Marge na moim serwerze. Tutaj utworzyłem użytkownika w msdb baza danych dla tego logowania. Następnie w ostatniej części przyznałem temu użytkownikowi dostęp do profilu, który właśnie utworzyłem.

W tym przykładzie utworzyłem jedno konto poczty bazy danych i dodałem je do profilu. Jeśli chcesz, możesz dodać wiele kont do profilu. Może to być przydatne jako przełączenie awaryjne podczas wysyłania poczty. Jeśli pierwsze konto się nie powiedzie, spróbuje następnego, następnego i tak dalej.

Gdy już będziesz mieć powyższy kod (z własnymi danymi), powinieneś być w stanie wysyłać pocztę.

Krok 3:Wyślij pocztę

Jak wspomniano, faktyczne wysyłanie poczty odbywa się za pomocą sp_send_dbmail procedura składowana.

Oto przykład:

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';

Jest to prosty e-mail z podstawowymi informacjami, takimi jak odbiorca, wiersz tematu, treść e-maila itp.

Jeśli nie określisz profilu, procedura użyje domyślnego profilu prywatnego dla bieżącego użytkownika. Jeśli nie ma domyślnego profilu prywatnego dla użytkownika, użyje on domyślnego profilu publicznego dla msdb Baza danych. Jeśli nie ma domyślnego profilu publicznego, pojawi się błąd.

Więcej opcji

sp_send_dbmail procedura akceptuje o wiele więcej argumentów niż użyłem w tym przykładzie.

Oto oficjalna składnia sp_send_dbmail procedura:

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 ]

Zobacz dokumentację Microsoft, aby uzyskać szczegółowe wyjaśnienie każdego argumentu.

Informacja o poczcie bazy danych

Zobacz samouczki dotyczące poczty bazy danych, aby uzyskać pełną listę samouczków poczty bazy danych. Może to być świetne odniesienie, ponieważ każdy samouczek dotyczy określonej części poczty bazy danych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wielka sprawa:dodatek Service Pack 1 dla programu SQL Server 2016

  2. Jak wykryć i zapobiec nieoczekiwanemu wzrostowi bazy danych SQL Server TempDB

  3. Oblicz sumę bieżącą w SQL Server

  4. Jaki jest najlepszy sposób tworzenia i wypełniania tabeli liczb?

  5. Nie można otworzyć domyślnej bazy danych użytkownika. Logowanie nie powiodło się. po zainstalowaniu SQL Server Management Studio Express