Dela via


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

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

I det här avsnittet beskrivs 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.

  • Innan du börjar:

  • För att visa status för e-postmeddelandet som skickats med hjälp av Database Mail använder du:Transact-SQL-

Innan du börjar

Database Mail behåller kopior av utgående e-postmeddelanden och visar dem i sysmail_allitems, sysmail_sentitems, sysmail_unsentitems, sysmail_faileditems vyer av msdb-databasen. Det externa programmet Database Mail loggar aktiviteten och visar loggen via Windows-programhändelseloggen och sysmail_event_log-vyn i msdb-databasen. Om du vill kontrollera statusen för ett e-postmeddelande kör du en fråga mot den här vyn. E-postmeddelanden har en av fyra möjliga statusar: skickade, ej, försök igenoch misslyckades.

Använda Transact-SQL

Så här visar du status för e-postmeddelandet som skickats med hjälp av Database Mail

  1. Välj från tabellen sysmail_allitems och specificera meddelanden av intresse med hjälp av mailitem_id eller sent_status.

  2. Om du vill kontrollera statusen som returneras från det externa programmet för e-postmeddelandena, koppla ihop sysmail_allitems med sysmail_event_log-vyn på kolumnen mailitem_id, som visas i följande avsnitt.

    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.

Exempel (Transact-SQL)

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  

Se även

Databasens e-postlogg och revisioner