Condividi tramite


Procedure per la risoluzione dei problemi generali relativi a Posta elettronica database

Si applica a: SQL Server e Istanza gestita di SQL di Azure

Per risolvere i problemi relativi a Posta elettronica database, è necessario controllare le aree generali seguenti del sistema di Posta elettronica database. Queste procedure vengono indicate in ordine logico, ma possono essere completate in qualsiasi sequenza.

Autorizzazioni

È necessario essere membri del ruolo predefinito del server sysadmin per risolvere i problemi correlati a tutti gli aspetti di Posta elettronica database. Gli utenti che non sono membri del ruolo predefinito del server sysadmin possono ottenere informazioni solo sui messaggi di posta elettronica che tentano di inviare personalmente e non su quelli inviati da altri utenti.

Posta elettronica database è abilitato

  1. In SQL Server Management Studio connettersi a un'istanza di SQL Server usando una finestra dell'editor di query e quindi eseguire il codice seguente:

    sp_configure 'show advanced', 1; 
    GO
    RECONFIGURE;
    GO
    sp_configure;
    GO
    

    Nel riquadro dei risultati confermare che run_value per Database Mail XPs sia impostato su 1. Se run_value non è 1, Posta elettronica database non è abilitato. Tale caratteristica non è abilitata automaticamente per ridurre il numero di caratteristiche che potrebbero essere soggette a un attacco da parte di un utente malintenzionato. Per altre informazioni, vedere Informazioni su Configurazione superficie di attacco.

  2. Se si decide che l'abilitazione di Posta elettronica database non comporta alcun problema, eseguire il codice seguente:

    sp_configure 'Database Mail XPs', 1; 
    GO
    RECONFIGURE;
    GO
    
  3. Per ripristinare lo stato predefinito per la procedura sp_configure, che non mostra le opzioni avanzate, eseguire il codice seguente:

    sp_configure 'show advanced', 0; 
    GO
    RECONFIGURE;
    GO
    

Gli utenti sono configurati correttamente per l'invio di posta elettronica

  1. Per inviare Posta elettronica database, è necessario essere un membro del ruolo del database DatabaseMailUserRole nel database msdb. I membri del ruolo predefinito del server sysadmin e del ruolo msdb db_owner appartengono automaticamente anche al ruolo DatabaseMailUserRole. Per elencare tutti gli altri membri di DatabaseMailUserRole, eseguire l'istruzione seguente:

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    
  2. Per aggiungere utenti al ruolo DatabaseMailUserRole, usare l'istruzione seguente:

    USE msdb;
    GO
    
    sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<database user>';
    
  3. Per poter inviare messaggi di Posta elettronica database, gli utenti devono avere accesso ad almeno un profilo di Posta elettronica database. Per elencare gli utenti (entità) e i profili a cui hanno accesso, eseguire l'istruzione seguente.

    EXEC msdb.dbo.sysmail_help_principalprofile_sp;
    
  4. Utilizzare la Configurazione guidata posta elettronica database per creare profili e consentire agli utenti di accedervi.

Posta elettronica database è avviato

  1. Il programma esterno Posta elettronica database viene attivato quando sono presenti messaggi di posta elettronica da elaborare. In assenza di messaggi da inviare per il periodo di timeout specificato, il programma viene chiuso. Per verificare che Posta elettronica database sia stato avviato, eseguire l'istruzione seguente.

    EXEC msdb.dbo.sysmail_help_status_sp;
    
  2. Se il programma esterno Posta elettronica database non è in esecuzione, eseguire l'istruzione seguente per avviarlo:

    EXEC msdb.dbo.sysmail_start_sp;
    
  3. Se il programma esterno Posta elettronica database è in esecuzione, eseguire l'istruzione seguente per controllare lo stato della coda della posta:

    EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail';
    

    Lo stato della coda della posta dovrebbe essere RECEIVES_OCCURRING. La coda dello stato può variare da un momento all'altro. Se lo stato della coda di posta elettronica non è RECEIVES_OCCURRING, provare a riavviare la coda. Arrestare la coda mediante l'istruzione seguente:

EXEC msdb.dbo.sysmail_stop_sp;

Avviare quindi la coda mediante l'istruzione seguente:

EXEC msdb.dbo.sysmail_start_sp;

Nota

Usare la colonna length nel set di risultati di sysmail_help_queue_sp per verificare il numero di messaggi di posta elettronica nella coda della posta.

I problemi influiscono su alcuni o tutti gli account

  1. Se si è appurato che solo alcuni profili possono inviare posta, è possibile che esistano problemi con gli account di Posta elettronica database utilizzati dai profili che non riescono a inviare messaggi. Per verificare quali account possono inviare posta, eseguire l'istruzione seguente:

    SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;
    
  2. Se un profilo che crea problemi non usa alcuno degli account elencati, è possibile che tutti gli account disponibili per tale profilo non funzionino correttamente. Per verificare i singoli account, usare la Configurazione guidata Posta elettronica database per creare un nuovo profilo con un singolo account e quindi provare a inviare un messaggio usando il nuovo account dalla finestra di dialogo Invia messaggio di prova.

  3. Per visualizzare i messaggi di errore restituiti da Posta elettronica database, eseguire l'istruzione seguente:

    SELECT * FROM msdb.dbo.sysmail_event_log;
    

    Nota

    Posta elettronica database contrassegna i messaggi come inviati quando sono stati recapitati correttamente a un server di posta elettronica SMTP. Il recapito dei messaggi può essere impedito anche da successivi errori, ad esempio un indirizzo di posta elettronica errato per un destinatario, che tuttavia non vengono registrati nel log di Posta elettronica database.

Nuovi tentativi di recapito della posta elettronica

  1. Se si è appurato che gli errori di Posta elettronica database sono dovuti a problemi di contatto del server SMTP, potrebbe essere possibile migliorare la frequenza di recapito aumentando il numero di tentativi eseguiti da Posta elettronica database per l'invio di ogni messaggio. Avviare la Configurazione guidata Posta elettronica database e selezionare l'opzione Visualizza o modifica i parametri di sistema. In alternativa, è possibile associare più account al profilo in modo che in caso di errore di recapito con l'account principale sia possibile utilizzare l'account di failover per l'invio dei messaggi di posta elettronica.

  2. Nella pagina Configurazione parametri di sistema i valori predefiniti pari a 60 volte per Tentativi account e cinque per Ritardo tentativi account indicano che il recapito dei messaggi avrà esito negativo se non è possibile contattare il server SMTP entro 5 minuti. Impostare un valore più alto per questi parametri per aumentare il periodo di tempo che deve trascorrere prima che il recapito dei messaggi abbia esito negativo.

    Nota

    Se la quantità di messaggi inviata è notevole, l'impostazione di valori predefiniti elevati può consentire di aumentare l'affidabilità, ma comporta un aumento sostanziale dell'utilizzo delle risorse a causa dei ripetuti tentativi di invio per numerosi messaggi. Affrontare il problema alla radice risolvendo l'errore di rete o del server SMTP che impedisce a Posta elettronica database di contattare tempestivamente il server SMTP.

Verificare che il Service Broker sia abilitato per msdb

Posta elettronica database richiede che Service Broker sia abilitato per il database msdb. Verificare se Service Broker è abilitato su msdb con lo script T-SQL seguente:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb' ; -- should be 1

Se non lo è, il Service Broker deve essere abilitato. Lo script di esempio seguente richiede l'accesso esclusivo ai database di sistema msdb, pertanto questa operazione potrebbe non essere fattibile per l'esecuzione durante il normale orario di ufficio. Per altre informazioni, vedere ALTER DATABASE ... SET ENABLE_BROKER.

ALTER DATABASE msdb SET ENABLE_BROKER;

Passaggi successivi