Condividi tramite


Errori comuni con Posta elettronica database

Si applica a:SQL ServerIstanza gestita di SQL di Azure

Questo articolo descrive alcuni errori comuni riscontrati con Posta elettronica database e le relative soluzioni.

Per eseguire comandi T-SQL nell'istanza di SQL Server, usare SQL Server Management Studio (SSMS),l'estensione MSSQL per Visual Studio Code, sqlcmd o lo strumento di query T-SQL preferito.

Impossibile trovare la stored procedure 'sp_send_dbmail'

La stored procedure sp_send_dbmail è installata nel database msdb. È necessario eseguire sp_send_dbmail dal database msdb oppure indicare un nome composto da tre parti per la procedura memorizzata.

Esempio:

EXEC msdb.dbo.sp_send_dbmail ...

Oppure:

USE msdb;
GO
EXEC dbo.sp_send_dbmail ...

Utilizzare Configura posta elettronica database per abilitare e configurare posta elettronica database.

Profilo non valido

Questo messaggio può avere due cause, ovvero il profilo non esiste oppure l'utente che esegue sp_send_dbmail (Transact-SQL) non ha le autorizzazioni necessarie per accedere al profilo.

Per controllare le autorizzazioni per un profilo, eseguire la stored procedure sysmail_help_principalprofile_sp (Transact-SQL) con il nome del profilo. Utilizzare la stored procedure sysmail_add_principalprofile_sp (Transact-SQL) o Configurare la posta elettronica di database per concedere a un utente o gruppo l'autorizzazione per accedere a un profilo.

Autorizzazione negata per sp_send_dbmail

Questo articolo descrive come risolvere un messaggio di errore che informa che l'utente che tenta di inviare Posta elettronica database non dispone dell'autorizzazione per l'esecuzione sp_send_dbmail

Il testo del messaggio di errore è il seguente:

EXECUTE permission denied on object 'sp_send_dbmail', 
database 'msdb', schema 'dbo'.

Per inviare posta elettronica database, gli utenti devono essere un utente nel msdb database e un membro del ruolo del database DatabaseMailUserRole nel msdb database. Per aggiungere utenti o gruppi di msdb a questo ruolo, usare SQL Server Management Studio oppure eseguire l'istruzione seguente per l'utente o il ruolo che deve inviare messaggi di Posta elettronica database.

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<user or role name>';
GO

Per altre informazioni, vedere sp_addrolemember e sp_droprolemember.

Posta elettronica accodata, nessuna voce in sysmail_event_log o nel registro eventi applicazioni di Windows

Posta elettronica database si basa su Service Broker per l'accodamento dei messaggi di posta elettronica. Se Database Mail viene arrestato o se il recapito dei messaggi di Service Broker non è attivato nel database, Database Mail accoda i messaggi nel database ma non può recapitare i messaggi. In questo caso, i messaggi di Service Broker rimangono nella coda della posta di Service Broker. Service Broker non attiva il programma esterno, quindi non ci sono voci di log in sysmail_event_log, e non vengono eseguiti aggiornamenti sullo stato dell'elemento in sysmail_allitems e nelle visualizzazioni correlate.

Eseguire l'istruzione seguente per verificare se Service Broker è abilitato nel msdb database:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';

Un valore 0 indica che il recapito dei messaggi di Service Broker non è attivato nel msdb database. Per correggere il problema, attivare Service Broker nel database con il comando Transact-SQL seguente:

USE master ;
GO

ALTER DATABASE msdb SET ENABLE_BROKER ;
GO

Posta elettronica database si basa su varie stored procedure interne. Per ridurre la superficie di attacco, queste stored procedure sono disabilitate in caso di nuova installazione di SQL Server. Per abilitare queste stored procedure, utilizzare l'opzione Database Mail XPs (opzione di configurazione server) della stored procedure di sistema sp_configure, come nell'esempio seguente:

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

La posta elettronica del database potrebbe essere arrestata nel database msdb. Esegui l'istruzione seguente per verificare lo stato della coda della posta elettronica database:

EXECUTE dbo.sysmail_help_status_sp;

Per avviare Mail di Database in un database host di posta, eseguire il comando seguente nel database msdb.

EXECUTE dbo.sysmail_start_sp;

Service Broker esamina la durata del dialogo per i messaggi all'attivazione. Pertanto, eventuali messaggi rimasti nella coda di trasmissione di Service Broker più a lungo della durata del dialogo generano immediatamente un errore. Posta elettronica database aggiorna lo stato dei messaggi non riusciti nella tabella sysmail_allitems e nelle viste correlate. È necessario che l'utente decida se ripetere l'invio dei messaggi di posta elettronica. Per altre informazioni sulla configurazione della durata della finestra di dialogo utilizzata da Posta elettronica database, vedere sysmail_configure_sp.

Passo successivo