Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come inviare e-mail da SQL Server (T-SQL)

SQL Server offre la possibilità di inviare e-mail tramite la sua soluzione di posta elettronica database.

L'effettivo atto di invio della posta viene eseguito con sp_send_dbmail procedura memorizzata. Ma prima di iniziare a inviare e-mail da SQL Server, è necessario abilitare e configurare Posta elettronica database.

Puoi farlo con la GUI di SSMS o con T-SQL.

Questo articolo illustra come farlo con T-SQL. Presuppone che Database Mail non sia mai stato abilitato sul tuo sistema e quindi esegue i passaggi necessari per abilitarlo.

Se si preferisce utilizzare la GUI di SSMS, vedere Come configurare la posta del database in SQL Server (SSMS).

Passaggio 1:abilita gli XP di Database Mail

La prima cosa da fare prima di inviare posta da SQL Server è abilitare le stored procedure estese di Posta elettronica database (Database Mail XP). Questi sono in msdb database di sistema.

Ciò richiede anche che "mostra opzioni avanzate" sia abilitato.

Questi sono disabilitati per impostazione predefinita. Quindi, se non hai mai utilizzato Database Mail sul tuo sistema, dovrai abilitarli.

Ecco come abilitare le opzioni avanzate e gli XP di Database Mail:

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

Non è necessario riavviare SQL Server. Gli XP di Database Mail dovrebbero ora essere disponibili per l'uso.

Microsoft in realtà consiglia che le opzioni avanzate come questa debbano essere modificate solo da un amministratore di database esperto o da un tecnico certificato di SQL Server, ma ai fini di questo articolo, presumo che tu sia un amministratore di database esperto che sta rinfrescando la tua memoria 😉

In ogni caso, per eseguire sp_configure con entrambi i parametri per modificare un'opzione di configurazione o per eseguire il RECONFIGURE istruzione, devi ottenere il ALTER SETTINGS autorizzazione a livello di server. Il ALTER SETTINGS l'autorizzazione è implicitamente detenuta dall'amministratore di sistema e amministratore server ruoli del server fissi.

Fase 2:crea un account e un profilo e-mail

Posta elettronica database viene inviata tramite un profilo, anziché direttamente da un account utente.

Per inviare messaggi di posta elettronica con Posta elettronica database è necessario creare un account Posta elettronica database, un profilo Posta elettronica database, aggiungere l'account al profilo e quindi concedere a un utente l'accesso a tale profilo. L'utente deve essere su msdb banca dati.

Il codice T-SQL per eseguire questa operazione potrebbe assomigliare a questo:

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

Dovrai sostituire i vari dettagli con i tuoi. Ciò presuppone anche che tu specifichi un server di posta funzionante e che utilizzi la porta corretta.

Nota che avevo già un accesso chiamato Marge sul mio server. Qui ho creato un utente su msdb database per quell'accesso. Quindi, nell'ultima parte, ho concesso a quell'utente l'accesso al profilo che ho appena creato.

In questo esempio, ho creato un account di posta elettronica database e l'ho aggiunto al profilo. Puoi aggiungere più account a un profilo, se lo desideri. Questo può essere utile come failover durante l'invio di posta. Se il primo account fallisce, proverà il successivo, il successivo e così via.

Una volta ottenuto il codice sopra (con i tuoi dati), dovresti essere in grado di inviare posta.

Fase 3:invia la posta

Come accennato, l'invio effettivo della posta viene effettuato con il sp_send_dbmail procedura memorizzata.

Ecco un esempio:

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

Questa è una semplice e-mail con le basi essenziali come il destinatario, la riga dell'oggetto, il corpo dell'e-mail, ecc.

Se non specifichi un profilo, la procedura utilizzerà il profilo privato predefinito per l'utente corrente. Se non esiste un profilo privato predefinito per l'utente, utilizzerà il profilo pubblico predefinito per msdb Banca dati. Se non esiste un profilo pubblico predefinito, riceverai un errore.

Più opzioni

Il sp_send_dbmail la procedura accetta un bel po' di argomenti in più rispetto a quelli che ho usato in questo esempio.

Ecco la sintassi ufficiale per 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 ]

Consulta la documentazione di Microsoft per una spiegazione dettagliata di ogni argomento.

Riferimento posta database

Vedere Esercitazioni di Posta elettronica database per un elenco completo delle esercitazioni di Posta elettronica database. Questo può essere un ottimo riferimento, perché ogni tutorial tratta una parte specifica di Database Mail.