Delen via


Controleer de status van e-mailberichten die zijn verzonden met database-e-mail

van toepassing op:SQL ServerAzure SQL Managed Instance

In dit artikel wordt beschreven hoe u de status van het e-mailbericht controleert dat is verzonden met behulp van Database Mail in SQL Server met behulp van Transact-SQL.

  • Database Mail bewaart kopieën van uitgaande e-mailberichten en geeft deze weer in de weergaven sysmail_allitems, sysmail_sentitems, sysmail_unsentitems, sysmail_faileditems van de msdb database.
  • De activiteiten van het externe programma Database Mail worden vastgelegd en het logboek wordt weergegeven via het Windows-gebeurtenislogboek en de sysmail_event_log-weergave in de msdb-database.
  • E-mailberichten hebben een van de vier mogelijke statussen: verzonden, niet-verzonden, opnieuw proberen en mislukt.

Als u de status van een e-mailbericht wilt controleren, voert u een query uit in de msdb.dbo.sysmail_event_log systeemweergave.

Gebruik Transact-SQL om de status weer te geven van de e-mail die is verzonden met database-e-mail

  • Selecteer vanuit de sysmail_allitems tabel en geef de gewenste berichten op door mailitem_id of sent_status.

  • Als u de status wilt controleren die is geretourneerd vanuit het externe programma voor de e-mailberichten, verbindt u sysmail_allitems met sysmail_event_log weergave op de mailitem_id kolom.

    Standaard worden in het externe programma geen gegevens vastgelegd over berichten die zijn verzonden. Om alle berichten te loggen, stelt u het logniveau in op 'uitgebreid' door de pagina Systeemparameters configureren van de wizard Database Mail configureren te gebruiken.

In het volgende voorbeeld ziet u informatie over e-mailberichten die naar danw zijn verzonden maar niet succesvol door het externe programma konden worden afgeleverd. De instructie bevat het onderwerp, de datum en tijd waarop het externe programma het bericht niet heeft verzonden en het foutbericht uit het database-e-maillogboek.

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