Controllare lo stato di messaggi di posta elettronica inviati con Posta elettronica databaseCheck the Status of E-Mail Messages Sent With Database Mail

In questo argomento viene illustrato come controllare lo stato del messaggio di posta elettronica inviato utilizzando Posta elettronica database in SQL Server 2017SQL Server 2017 tramite Transact-SQLTransact-SQL.This topic describes how to check the status of the e-mail message sent using Database Mail in SQL Server 2017SQL Server 2017 by using Transact-SQLTransact-SQL.

  • Prima di iniziare:Before you begin:

  • Per visualizzare lo stato della posta elettronica inviata utilizzando Posta elettronica database, utilizzando: Transact-SQLTo view the status of the e-mail sent using Database Mail, using: Transact-SQL

Prima di iniziare Before You Begin

Posta elettronica database conserva copie dei messaggi di posta elettronica in uscita e le visualizza nelle viste sysmail_allitems, sysmail_sentitems, sysmail_unsentitemse sysmail_faileditems del database msdb .Database Mail keeps copies of outgoing e-mail messages and displays them in the sysmail_allitems, sysmail_sentitems, sysmail_unsentitems, sysmail_faileditems views of the msdb database. Il programma esterno Posta elettronica database registra l'attività e visualizza il log tramite il registro eventi applicazioni di Windows e la vista sysmail_event_log nel database msdb .The Database Mail external program logs activity and displays the log through the Windows Application Event Log and the sysmail_event_log view in the msdb database. Per controllare lo stato di un messaggio di posta elettronica, è necessario eseguire una query su questa tabella.To check the status of an e-mail message, run a query against this view. I messaggi di posta elettronica possono avere uno dei quattro stati seguenti: inviato, non inviato, nuovo tentativo in corsoe non riuscito.E-mail messages have one of four possible statuses: sent, unsent, retrying, and failed.

Utilizzo di Transact-SQL Using Transact-SQL

Per visualizzare lo stato della posta elettronica inviata utilizzando Posta elettronicaTo view the status of the e-mail sent using Database Mail

  1. Selezionare dalla tabella sysmail_allitems specificando i messaggi di interesse tramite mailitem_id o sent_status.Select from the sysmail_allitems table, specifying the messages of interest by mailitem_id or sent_status.

  2. Per controllare lo stato restituito dal programma esterno per i messaggi di posta elettronica, unire in join sysmail_allitems alla vista sysmail_event_log nella colonna mailitem_id , come illustrato nella sezione seguente.To check the status returned from the external program for the e-mail messages, join sysmail_allitems to sysmail_event_log view on the mailitem_id column, as shown in the following section.

    Per impostazione predefinita, il programma esterno non registra le informazioni relative ai messaggi inviati correttamente.By default, the external program does not log information about messages that were successfully sent. Per registrare tutti i messaggi, impostare il livello di registrazione su dettagliato utilizzando la pagina Configurazione parametri di sistema di Configurazione guidata Posta elettronica database.To log all messages, set the logging level to verbose using the Configure System Parameters page of the Database Mail Configuration Wizard.

Esempio (Transact-SQL) Example (Transact-SQL)

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.The following example lists information about any e-mail messages sent to danw that the external program could not send successfully. 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.The statement lists the subject, the date and time that the external program failed to send the message, and the error message from the Database Mail log.

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  

Vedere ancheSee Also

Controlli e registrazione di Posta elettronica databaseDatabase Mail Log and Audits