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

Configurazione della posta database in SQL Server

Posta elettronica database di SQL Server è stata introdotta in SQL Server 2005. Posta elettronica database è un componente che può inviare messaggi di posta elettronica utilizzando il motore di SQL ServerSQL Server Engine. Utilizzando Posta database, un amministratore o uno sviluppatore può inviare l'output della query a un utente finale. I DBA possono configurarlo per ricevere avvisi e notifiche e-mail. Database Mail utilizza SMTP (Simple Mail Transfer Protocol) per recapitare le e-mail ai destinatari.

In questo articolo dimostrerò come configurare la posta del database di SQL Server.

Prerequisiti per abilitare la posta database

Per abilitare la funzione di posta del database, sono richiesti i seguenti prerequisiti:

  1. Deve essere abilitato Service Broker per database MSDB.
  2. Il servizio SQL Server Agent deve essere in esecuzione.

Deve essere abilitato Service Broker

Posta elettronica database richiede che il broker di servizi accoda i messaggi di posta elettronica. Se il broker di servizi è disabilitato, la posta del database non può recapitare i messaggi del broker di servizi e rimane nella coda del broker di servizi.
Per verificare che il broker di servizi sia abilitato, eseguire la query seguente:

USE master 
go 

SELECT database_id AS 'Database ID', 
       NAME        AS 'Database Name', 
       CASE 
         WHEN is_broker_enabled = 0 THEN 'Service Broker is disabled.' 
         WHEN is_broker_enabled = 1 THEN 'Service Broker is Enabled.' 
       END         AS 'Service Broker Status' 
FROM   sys.databases 
WHERE  NAME = 'msdb.'

L'output ha il seguente aspetto:

Se il broker di servizi nel database MSDB è disabilitato, eseguire le seguenti query in sequenza per abilitare il broker di servizi:

Use master
go
alter database [MSDB] set single_user with rollback immediate
GO
alter database [MSDB] set Enable_Broker
GO
alter database [MSDB] set multi_user with rollback immediate
GO

Il servizio SQL Server Agent deve essere in esecuzione

Posta elettronica database invia messaggi di posta elettronica o messaggi utilizzando il servizio dell'agente di SQL Server. Se i servizi dell'agente non sono in esecuzione, SQL Server non può inviare messaggi di posta elettronica. Mentre il servizio agente non è in esecuzione, tutti i messaggi verranno accodati e, all'avvio del servizio agente, tutti i messaggi in coda verranno consegnati.

Per verificare lo stato del servizio agente, eseguire il comando seguente in SQL Server Management Studio.

use master
go
EXEC xp_servicecontrol N'querystate',N'SQLAgent$CMS'

L'output ha il seguente aspetto:

Se il servizio dell'agente di SQL Server non è in esecuzione, è necessario avviarlo. Per avviare il servizio SQL Server Agent, apri Servizi , vai su Pannello di controllo>> Strumenti di amministrazione>> Servizi . Nell'elenco dei servizi, cerca SQL Server Agent . Fare clic con il pulsante destro del mouse su SQL Server Agent e seleziona Inizia come mostrato nell'immagine seguente:

Una volta abilitato il broker di servizi e avviato il servizio SQL Agent, abilitare l'e-mail del database modificando il parametro di configurazione dell'istanza del database. Per impostazione predefinita, la funzione di posta elettronica del database non è abilitata. Deve essere abilitato modificando il valore di configurazione di Database Mail XPs da 0 a 1. Di nuovo, i Database Mail XPs il parametro è un'opzione avanzata; quindi, prima di modificarlo, cambia Mostra opzione avanzata parametro di configurazione da 0 a 1.

Per abilitare la posta del database, eseguire le seguenti query in sequenza:

USE master
Go
EXEC sp_configure 'show advanced options', 1 --Enable advance option
Go
RECONFIGURE
Go
EXEC sp_configure 'Database Mail XPs,' 1 --Enable database Mail option
Go
RECONFIGURE
Go
EXEC sp_configure 'show advanced options', 0 --Disabled advanced option
Go
RECONFIGURE
Go

Dopo aver abilitato Posta database, crea un profilo di posta del database e un account di posta del database.

Configurazione della posta database

Una volta soddisfatti tutti i prerequisiti, configurare l'account di posta del database e il profilo di posta del database.

Creazione del profilo e dell'account di Database Mail

Per configurare l'account di posta del database e il profilo di posta del database, aprire SQL Server Management Studio. In Esplora oggetti, espandi Gestione e fare clic con il pulsante destro del mouse su Configura Posta database , come mostrato nell'immagine seguente:

La Configurazione guidata della posta nel database si apre la finestra di dialogo. Nella finestra di dialogo, seleziona Imposta posta elettronica database eseguendo le seguenti attività pulsante di opzione e fai clic su Avanti .

Ora, nel Nuovo profilo finestra di dialogo, fornisci un nome profilo, una descrizione facoltativa e fai clic su Aggiungi pulsante per creare un account SMTP. È possibile configurare più account SMTP. Quando la posta del database invia un'e-mail, utilizza l'account SMTP in base alla priorità elencata nell'Account SMTP vista a griglia. Se un account non riesce durante l'invio di e-mail, il profilo utilizza l'account successivo nell'elenco delle priorità. Vedi l'immagine seguente:

Nel Nuovo account di posta elettronica database finestra di dialogo, fornisci un Nome account appropriato , Descrizione (facoltativo), Indirizzo email , Nome visualizzato , Email di risposta (Facoltativo), server SMTP e Numero di porta . Se il server SMTP utilizza l'autenticazione SSL/TSL, seleziona Il server richiede un'autenticazione sicura opzione. Nell'elenco di autenticazione, seleziona un tipo di autenticazione, utilizzato per autenticare il server SMTP e fai clic su OK . Vedi l'immagine seguente:

Torna nella Configurazione guidata della posta del database finestra di dialogo, l'account SMTP verrà elencato negli Account SMTP vista a griglia. Vedi l'immagine seguente:

Fai clic su Avanti per configurare la sicurezza del profilo di posta del database. Possiamo configurare il profilo email del database sia privato che pubblico. Solo un utente o un ruolo specifico può inviare e-mail utilizzando l'utilizzo del profilo privato. Qualsiasi utente o ruolo del database può inviare e-mail utilizzando il profilo pubblico. Gli utenti devono essere creati nel database MSDB e tali utenti devono essere membri di un ruolo del database denominato DatabaseMailUserRole per inviare una e-mail. Possiamo anche impostare il profilo come profilo predefinito. Una volta impostata la sicurezza del profilo, fai clic su Avanti per configurare il parametro di sistema. Vedere l'immagine seguente per visualizzare la configurazione:

In Configura parametro di sistema finestra, possiamo impostare un numero di tentativi, la dimensione massima del file allegato, l'elenco delle estensioni di file di cui è vietato inviare come allegato. Vedi l'immagine seguente:

Una volta configurato il parametro di sistema, fare clic su Avanti per rivedere l'intera configurazione e l'elenco delle azioni. Fai clic su Fine per completare la configurazione della posta del database. Vedi l'immagine seguente.

Una volta completata la configurazione, fai clic su Chiudi per uscire dalla procedura guidata. Vedi l'immagine seguente:

Creazione e configurazione del profilo e dell'account di Database Mail utilizzando T-SQL

Possiamo anche configurare il profilo di posta del database e l'account di posta utilizzando T-SQL. Per configurare la posta del database, l'utente deve disporre dell'autorizzazione 'esegui' sulla seguente procedura memorizzata.

  1. Sysmail_add_account_sp
  2. Sysmail_add_profile_sp
  3. Sysmail_add_profileaccount_sp

Il Sysmail_add_account_sp la procedura crea un account per la posta del database. Per creare un account per la posta del database, eseguire il codice seguente:

EXEC msdb.dbo.sysmail_add_account_sp
    @account_name = 'Database Mail Default SMTP account'
  , @description = 'This account will be used to send database mail'
  , @email_address = '[email protected]'
  , @display_name = 'DBA Support'
  , @replyto_address = ''
  , @mailserver_type = 'SMTP'
  , @mailserver_name = '192.168.1.60'
  , @port = 25
Go

Il Sysmail_add_profile_sp procedura crea un profilo di posta del database. Per creare un profilo di posta del database, eseguire il codice seguente:

-- Create a Database Mail profile
EXEC msdb.dbo.sysmail_add_profile_sp
    @profile_name = 'Database Mail Profile'
  , @description = 'This profile will be used to send database mail'
Go

Il Sysmail_add_profileaccount_sp la procedura aggiunge l'account SMTP a un profilo di posta del database. Per aggiungere un account SMTP al profilo di posta del database, eseguire il codice seguente:

-- Add the account to the profile
EXEC msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = 'Database Mail Profile'
  , @account_name = 'Database Mail Default SMTP account'
  , @sequence_number = 1
Go

Invio di posta di prova tramite Posta database

Una volta configurata la posta del database, come accennato in precedenza, per inviare un'e-mail, l'utente deve essere creato nel database MSDB e questo utente deve essere un membro di DatabaseMailUserRole . Consente a un utente del database di inviare e-mail utilizzando Database Mail. L'utente del database deve disporre di un'autorizzazione di esecuzione sulle seguenti procedure archiviate, utilizzate per gestire la posta del database:

  • sysmail_help_status_sp
  • sysmail_delete_mailitems_sp
  • sysmail_allitems
  • sysmail_event_log
  • sysmail_faileditems
  • sysmail_mailattachments
  • sysmail_sentitemi
  • sysmail_unsentitemi

Per inviare un'e-mail di prova utilizzando SSMS, apri SQL Server Management Studio>> espandi Gestione in Gestione SQL Server>> Fare clic con il pulsante destro del mouse su Posta database e seleziona Invia email di prova . Vedi l'immagine seguente:

Il Invia email di prova si apre la finestra di dialogo. NelProfilo Posta Database selezionare il nome del profilo utilizzato per inviare un'e-mail (Profilo e-mail database), nella casella A casella di testo, fornisci l'indirizzo e-mail del destinatario e fai clic su Invia messaggio di prova . Vedi l'immagine seguente:

Possiamo anche inviare e-mail utilizzando il codice T-SQL. Per farlo, esegui il seguente script T-SQL:

use MSDB
go
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'Database Mail Profile'
  , @recipients = '[email protected]'
  , @subject = 'Automated Test Results (Successful)'
  , @body = 'The stored procedure finished successfully.'
Go

Elenco delle tabelle essenziali per controllare lo stato dell'email

Di seguito è riportato l'elenco delle tabelle, utilizzate per visualizzare la posta del database di configurazione, l'account del database e lo stato dell'e-mail.

[id tabella=53 /]

Per visualizzare il registro di posta del database, apri SQL Server Management Studio>> espandi Gestione>> Fare clic con il pulsante destro del mouse su Posta database e seleziona Visualizza registro posta database . Vedi l'immagine seguente:

Il Visualizzatore file di registro si apre la finestra di dialogo, come mostrato nell'immagine seguente:

Eliminazione dell'account e del profilo di Database Mail

Per eliminare il profilo di Posta elettronica database, eliminare prima il profilo di Posta elettronica database. Per farlo, apri Configurazione guidata Posta database come spiegato all'inizio dell'articolo. Nella procedura guidata, seleziona Gestisci account e profili di Posta elettronica database e fai clic su Avanti . Vedi l'immagine seguente:

In Gestisci profili e account s, seleziona Visualizza modifica o elimina un profilo esistente e fai clic su Avanti . Vedi l'immagine seguente:

In Gestisci profilo esistente pagina, seleziona il nome del profilo che desideri eliminare dal Nome profilo casella a discesa e fai clic su Elimina e fai clic su Avanti. Vedi l'immagine seguente:

Successivamente, lo schermo visualizzerà il riepilogo dell'azione, rivedrà il riepilogo e fai clic su Fine per eliminare il profilo. Vedi l'immagine seguente:

Dopo aver eliminato il profilo di posta del database, eliminare l'account del database. Per farlo, su Apri configurazione guidata di Posta elettronica database>> seleziona Gestisci account e profilo di Posta elettronica database>> Scegli Visualizza, modifica o elimina un account esistente opzione e fai clic su Avanti. Vedi l'immagine seguente:

In Gestisci account esistente pagina, dal Nome account casella a discesa, seleziona il nome dell'account che desideri eliminare e fai clic su Elimina pulsante, come mostrato nell'immagine seguente:

La schermata seguente visualizzerà il riepilogo dell'azione, rivedrà il riepilogo e fai clic su Fine per abbandonare l'account. Vedi l'immagine seguente:

Eliminazione dell'account e del profilo di Database Mail utilizzando T-SQL

È inoltre possibile eliminare l'account di posta del database e il profilo di posta del database eseguendo lo script T-SQL. Per eliminare il profilo e l'account del database, eseguire il codice seguente:

IF EXISTS(SELECT * 
            FROM msdb.dbo.sysmail_profileaccount pa 
              INNER JOIN msdb.dbo.sysmail_profile p ON pa.profile_id = p.profile_id 
              INNER JOIN msdb.dbo.sysmail_account a ON pa.account_id = a.account_id   
            WHERE p.name = 'Database Mail Profile' 
              AND a.name = 'Database Mail Default SMTP account') 
  BEGIN 
    EXECUTE msdb.dbo.sysmail_delete_profileaccount_sp @profile_name = 'Database Mail Profile',@account_name = 'Database Mail Default SMTP account' 
  END  
IF EXISTS(SELECT * FROM msdb.dbo.sysmail_account WHERE  name = 'Database Mail Default SMTP account') 
  BEGIN 
    EXECUTE msdb.dbo.sysmail_delete_account_sp @account_name = 'Database Mail Default SMTP account' 
  END 
IF EXISTS(SELECT * FROM msdb.dbo.sysmail_profile WHERE  name = 'Database Mail Profile')  
  BEGIN 
    EXECUTE msdb.dbo.sysmail_delete_profile_sp @profile_name = 'Database Mail Profile' 
  END

Per verificare che la posta del database e l'account del database siano stati eliminati, eseguire la query seguente:

SELECT * 
            FROM msdb.dbo.sysmail_profileaccount pa 
              INNER JOIN msdb.dbo.sysmail_profile p ON pa.profile_id = p.profile_id 
              INNER JOIN msdb.dbo.sysmail_account a ON pa.account_id = a.account_id   
            WHERE p.name = 'Database Mail Profile' 
              AND a.name = 'Database Mail Default SMTP account'

Riepilogo

In questo articolo ho spiegato:

  1. Cosa sono Database Mail e il suo scopo?
  2. Prerequisiti per configurare Database Mail.
  3. Configura l'account di posta elettronica database e il profilo di posta elettronica database utilizzando SQL Server Management Studio.
  4. Configura l'account di posta elettronica database e il profilo di posta elettronica database utilizzando T-SQL.
  5. Invia email di prova utilizzando SSMS e T-SQL.
  6. Elimina con grazia il profilo di Posta elettronica database e l'account Posta database.