Sdílet prostřednictvím


Kontrola stavu e-mailových zpráv odeslaných pomocí databázové pošty

platí pro:SQL Serverazure SQL Managed Instance

Tento článek popisuje, jak zkontrolovat stav e-mailové zprávy odeslané pomocí databázové pošty na SQL Serveru pomocí jazyka Transact-SQL.

  • Databázová pošta uchovává kopie odchozích e-mailových zpráv a zobrazuje je v zobrazeních sysmail_allitems, sysmail_sentitems, sysmail_unsentitems, sysmail_faileditems databáze msdb.
  • Externí program Databázová pošta protokoluje aktivitu a zobrazuje protokol prostřednictvím protokolu událostí aplikace systému Windows a sysmail_event_log zobrazení v msdb databázi.
  • E-mailové zprávy mají jeden ze čtyř možných stavů: odeslané, neodeslané, pokus odeslánía selhané.

Pokud chcete zkontrolovat stav e-mailové zprávy, spusťte dotaz na msdb.dbo.sysmail_event_log systémové zobrazení.

Zobrazení stavu e-mailu odeslaného pomocí databázové pošty pomocí Transact-SQL

  • Vyberte z sysmail_allitems tabulky a určete pomocí mailitem_id nebo sent_status, které zprávy vás zajímají.

  • Pokud chcete zkontrolovat stav vrácený z externího programu pro e-mailové zprávy, spojte sysmail_allitems s sysmail_event_log ve sloupci mailitem_id.

    Ve výchozím nastavení externí program nezapisuje informace o zprávách, které byly úspěšně odeslány. Pokud chcete protokolovat všechny zprávy, nastavte úroveň protokolování na podrobnou na stránce Konfigurovat systémové parametry Průvodce konfigurací databázové pošty .

Následující příklad uvádí informace o všech e-mailových zprávách odeslaných do danw, které externí program nemohl úspěšně odeslat. Příkaz uvádí předmět, datum a čas, kdy se externímu programu nepodařilo odeslat zprávu, a chybovou zprávu z protokolu databázové pošty.

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