Condividi tramite


Controllare lo stato dei messaggi di posta elettronica inviati con Database Mail

Si applica a:SQL ServerIstanza 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 database msdb.
  • 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 database msdb.
  • 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 per mailitem_id o sent_status.

  • Per controllare lo stato restituito dal programma esterno per i messaggi di posta elettronica, creare un join di sysmail_allitems alla vista sysmail_event_log sulla colonna mailitem_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