Errori comuni con Posta elettronica database
Si applica a: SQL Server e Istanza gestita di SQL di Azure
Questo articolo descrive alcuni errori comuni riscontrati con Posta elettronica database e le relative soluzioni.
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 specificare un nome in tre parti per la stored procedure.
Esempio:
EXEC msdb.dbo.sp_send_dbmail ...
Oppure:
USE msdb;
GO
EXEC dbo.sp_send_dbmail ...
Usare la Configurazione guidata 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. Usare la stored procedure sysmail_add_principalprofile_sp (Transact-SQL) o la Configurazione guidata Posta elettronica database per concedere l'autorizzazione di accesso a un profilo a un utente o un gruppo di msdb.
Autorizzazione negata per sp_send_dbmail
In questo argomento viene descritto come risolvere il problema segnalato da un messaggio di errore in cui si informa che l'utente che sta tentando di inviare messaggi di Posta elettronica database non è autorizzato a eseguire sp_send_dbmail.
Il testo del messaggio di errore è il seguente:
EXECUTE permission denied on object 'sp_send_dbmail',
database 'msdb', schema 'dbo'.
Per poter inviare messaggi di Posta elettronica database, è necessario essere un utente nel database msdb e un membro del ruolo del database DatabaseMailUserRole nel database msdb. 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 l'esecuzione di Posta elettronica database viene arrestata o se il recapito dei messaggi di Service Broker non è attivato nel database msdb, Posta elettronica database accoda i messaggi nel database ma non è in grado di recapitarli. 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 né aggiornamenti allo stato dell'elemento in sysmail_allitems e nelle viste correlate.
Eseguire l'istruzione seguente per verificare se Service Broker è abilitato nel database msdb:
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 database msdb. 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, usare l'opzione Database Mail XPs 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
Posta elettronica database potrebbe essere arrestato 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 Posta elettronica database in un database host della posta elettronica, 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 del dialogo predefinita usata da Posta elettronica database, vedere sysmail_configure_sp (Transact-SQL).