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

Abilita posta database in SQL Server (T-SQL)

SQL Server dispone di un'opzione di posta del database che puoi utilizzare per inviare posta dal server del database.

Ad esempio, puoi ricevere notifiche quando i processi di SQL Server Agent terminano o hanno esito negativo oppure quando si verifica un errore di gravità elevata e così via.

Quando Database Mail non è configurato

In SQL Server, la posta viene inviata eseguendo sp_send_dbmail stored procedure nel msdb banca dati.

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

Tuttavia, ciò presuppone che SQL Server sia configurato per l'invio di posta.

Se si tenta di inviare posta da SQL Server, ma viene visualizzato un errore simile al seguente, significa che al momento Posta database non è abilitata.

Msg 15281, Level 16, State 1, Procedure msdb.dbo.sp_send_dbmail, Line 0
SQL Server blocked access to procedure 'dbo.sp_send_dbmail' of component 'Database Mail XPs' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Database Mail XPs' by using sp_configure. For more information about enabling 'Database Mail XPs', search for 'Database Mail XPs' in SQL Server Books Online.

Abilita XP di Database Mail

Prima di iniziare a inviare posta dal server, devi assicurarti di aver abilitato Database Mail XPs.

Questo è abbastanza facile da fare (sebbene Microsoft consiglia di modificare le opzioni avanzate come questa solo da un amministratore di database esperto o da un tecnico certificato di SQL Server).

Ecco come abilitare Database Mail XP:

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

Risultato:

Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
Commands completed successfully.
Commands completed successfully.

Crea un account di posta, un profilo, ecc.

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.

Dopo averlo fatto, dovresti essere in grado di inviare posta con msdb.dbo.sp_send_dbmail procedura memorizzata.