Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Istanza gestita di SQL di Azure
Questo articolo descrive come controllare lo stato del messaggio di posta elettronica inviato tramite Posta elettronica database in SQL Server tramite Transact-SQL.
- Database Mail mantiene copie dei messaggi di posta elettronica in uscita e li visualizza nelle
sysmail_allitems
,sysmail_sentitems
,sysmail_unsentitems
,sysmail_faileditems
viste del databasemsdb
. - Il programma esterno Database Mail registra l'attività e visualizza il log tramite il registro eventi dell'applicazione di Windows e la visualizzazione
sysmail_event_log
nel databasemsdb
. - I messaggi di posta elettronica possono avere uno dei quattro stati seguenti: inviato, non inviato, nuovo tentativo in corsoe non riuscito.
Per controllare lo stato di un messaggio di posta elettronica, eseguire una query sulla msdb.dbo.sysmail_event_log
vista di sistema.
Utilizzare Transact-SQL per visualizzare lo stato dell'e-mail inviata tramite Database Mail
Selezionare dalla
sysmail_allitems
tabella specificando i messaggi di interesse permailitem_id
osent_status
.Per controllare lo stato restituito dal programma esterno per i messaggi di posta elettronica, creare un join di
sysmail_allitems
alla vistasysmail_event_log
sulla colonnamailitem_id
.Per impostazione predefinita, il programma esterno non registra le informazioni relative ai messaggi inviati correttamente. Per registrare tutti i messaggi, impostare il livello di registrazione su dettagliato utilizzando la pagina Configurazione parametri di sistema di Procedura guidata di configurazione Database Mail.
Nell'esempio seguente sono elencate le informazioni relative a eventuali messaggi di posta elettronica inviati a danw
che il programma esterno non è stato in grado di inviare correttamente. L'istruzione elenca oggetto, data e ora del mancato invio del messaggio da parte del programma esterno e il messaggio di errore dal log di Posta elettronica database.
USE msdb ;
GO
-- Show the subject, the time that the mail item row was last
-- modified, and the log information.
-- Join sysmail_faileditems to sysmail_event_log
-- on the mailitem_id column.
-- In the WHERE clause list items where danw was in the recipients,
-- copy_recipients, or blind_copy_recipients.
-- These are the items that would have been sent
-- to danw.
SELECT items.subject,
items.last_mod_date
,l.description
FROM dbo.sysmail_faileditems AS items
INNER JOIN dbo.sysmail_event_log AS l
ON items.mailitem_id = l.mailitem_id
WHERE items.recipients LIKE '%danw%'
OR items.copy_recipients LIKE '%danw%'
OR items.blind_copy_recipients LIKE '%danw%';
GO