Dela via


Kontrollera statusen för e-postmeddelanden som skickas med databasmeddelande

gäller för:SQL ServerAzure SQL Managed Instance

Den här artikeln beskriver hur du kontrollerar statusen för det e-postmeddelande som skickas med Hjälp av Database Mail i SQL Server med hjälp av Transact-SQL.

  • Database Mail behåller kopior av utgående e-postmeddelanden och visar dem i vyerna sysmail_allitems, sysmail_sentitems, sysmail_unsentitems, sysmail_faileditems i msdb databasen.
  • Det externa programmet Database Mail loggar aktiviteten och visar loggen via Händelseloggen för Windows-program och sysmail_event_log vyn i msdb databasen.
  • E-postmeddelanden har en av fyra möjliga statusar: skickade, ej, försök igenoch misslyckades.

Om du vill kontrollera statusen för ett e-postmeddelande kör du en fråga mot msdb.dbo.sysmail_event_log systemvyn.

Använd Transact-SQL för att se status för det skickade e-postmeddelandet som skickades med hjälp av Database Mail

  • Välj från tabellen sysmail_allitems och specificera de meddelanden som intresserar genom att använda mailitem_id eller sent_status.

  • Om du vill kontrollera statusen som returneras från det externa programmet för e-postmeddelandena, ansluter du sysmail_allitems till sysmail_event_log-vyn på kolumnen mailitem_id.

    Som standard loggar inte det externa programmet information om meddelanden som har skickats. Om du vill logga alla meddelanden anger du loggningsnivån till utförlig med hjälp av sidan Konfigurera systemparametrar i konfigurationsguiden för Database Mail.

I följande exempel visas information om eventuella e-postmeddelanden som skickas till danw som det externa programmet inte kunde skicka. Instruktionen visar ämnet, datum och tid då det externa programmet inte kunde skicka meddelandet och felmeddelandet från Database Mail-loggen.

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