Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So senden Sie E-Mails von SQL Server (T-SQL)

SQL Server bietet die Möglichkeit, E-Mails über seine Database Mail-Lösung zu versenden.

Der eigentliche Akt des Mailversands wird mit sp_send_dbmail erledigt gespeicherte Prozedur. Bevor Sie jedoch mit dem Senden von E-Mails von SQL Server beginnen, müssen Sie Datenbank-E-Mail aktivieren und konfigurieren.

Sie können dies mit der SSMS-GUI oder mit T-SQL tun.

Dieser Artikel demonstriert die Vorgehensweise mit T-SQL. Es geht davon aus, dass Datenbank-E-Mail noch nie auf Ihrem System aktiviert wurde, und führt daher die Schritte zur Aktivierung durch.

Wenn Sie lieber die SSMS-GUI verwenden, lesen Sie How to Setup Database Mail in SQL Server (SSMS).

Schritt 1:Datenbank-E-Mail-XPs aktivieren

Das erste, was Sie tun müssen, bevor Sie E-Mails von SQL Server senden, ist, die erweiterten gespeicherten Prozeduren von Database Mail (Database Mail XPs) zu aktivieren. Diese befinden sich in der msdb Systemdatenbank.

Dazu muss auch „Erweiterte Optionen anzeigen“ aktiviert sein.

Diese sind standardmäßig deaktiviert. Wenn Sie also Datenbank-E-Mail noch nie auf Ihrem System verwendet haben, müssen Sie sie aktivieren.

So aktivieren Sie erweiterte Optionen und die Database Mail XPs:

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

Es ist nicht erforderlich, SQL Server neu zu starten. Die Datenbank-E-Mail-XPs sollten jetzt verfügbar sein.

Microsoft empfiehlt tatsächlich, dass erweiterte Optionen wie diese nur von einem erfahrenen Datenbankadministrator oder zertifizierten SQL Server-Techniker geändert werden sollten, aber für die Zwecke dieses Artikels gehe ich davon aus, dass Sie ein erfahrener DB-Administrator sind, der Ihr Gedächtnis auffrischt 😉

In jedem Fall, um sp_configure auszuführen mit beiden Parametern, um eine Konfigurationsoption zu ändern oder RECONFIGURE auszuführen -Anweisung müssen Ihnen die ALTER SETTINGS gewährt werden Berechtigung auf Serverebene. Die ALTER SETTINGS Die Berechtigung liegt implizit beim sysadmin und serveradmin feste Serverrollen.

Schritt 2:E-Mail-Konto und -Profil erstellen

Datenbank-E-Mail wird über ein Profil und nicht direkt über ein Benutzerkonto gesendet.

Um E-Mails mit Datenbank-E-Mail zu senden, müssen Sie ein Datenbank-E-Mail-Konto und ein Datenbank-E-Mail-Profil erstellen, das Konto zum Profil hinzufügen und dann einem Benutzer Zugriff auf dieses Profil gewähren. Der Benutzer muss sich in der msdb befinden Datenbank.

Der T-SQL-Code dafür könnte in etwa so aussehen:

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

Sie müssen die verschiedenen Details durch Ihre eigenen ersetzen. Dies setzt auch voraus, dass Sie einen funktionierenden Mailserver angeben und den richtigen Port verwenden.

Beachten Sie, dass ich bereits ein Login namens Marge auf meinem Server hatte. Hier habe ich einen Benutzer auf der msdb erstellt Datenbank für diese Anmeldung. Im letzten Teil habe ich diesem Benutzer dann Zugriff auf das Profil gewährt, das ich gerade erstellt habe.

In diesem Beispiel habe ich ein Datenbank-E-Mail-Konto erstellt und es dem Profil hinzugefügt. Sie können einem Profil mehrere Konten hinzufügen, wenn Sie möchten. Dies kann als Failover beim Senden von E-Mails nützlich sein. Wenn das erste Konto fehlschlägt, versucht es das nächste und das nächste und so weiter.

Sobald Sie den obigen Code (mit Ihren eigenen Daten) haben, sollten Sie in der Lage sein, E-Mails zu senden.

Schritt 3:Mail senden

Wie bereits erwähnt, erfolgt das eigentliche Versenden der Mail mit dem sp_send_dbmail gespeicherte Prozedur.

Hier ist ein Beispiel:

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

Dies ist eine einfache E-Mail mit den bloßen Grundlagen wie Empfänger, Betreffzeile, E-Mail-Text usw.

Wenn Sie kein Profil angeben, verwendet die Prozedur das standardmäßige private Profil für den aktuellen Benutzer. Wenn es kein privates Standardprofil für den Benutzer gibt, wird das öffentliche Standardprofil für msdb verwendet Datenbank. Wenn es kein öffentliches Standardprofil gibt, erhalten Sie eine Fehlermeldung.

Weitere Optionen

Die sp_send_dbmail -Prozedur akzeptiert einige Argumente mehr als das, was ich in diesem Beispiel verwendet habe.

Hier ist die offizielle Syntax für sp_send_dbmail Verfahren:

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 ]

Eine detaillierte Erläuterung der einzelnen Argumente finden Sie in der Microsoft-Dokumentation.

Datenbank-E-Mail-Referenz

Unter Tutorials zu Datenbank-E-Mail finden Sie eine umfassende Liste von Tutorials zu Datenbank-E-Mail. Dies kann eine großartige Referenz sein, da sich jedes Tutorial mit einem bestimmten Teil von Database Mail befasst.