Udostępnij za pośrednictwem


Sprawdzanie stanu wiadomości e-mail wysłanych za pomocą poczty bazy danych

Dotyczy:programu SQL ServerAzure SQL Managed Instance

W tym artykule opisano sposób sprawdzania stanu wiadomości e-mail wysyłanej przy użyciu poczty bazy danych w programie SQL Server przy użyciu języka Transact-SQL.

  • Poczta bazy danych przechowuje kopie wychodzących wiadomości e-mail i wyświetla je w widokach sysmail_allitems, sysmail_sentitems, sysmail_unsentitems, sysmail_faileditems bazy danych msdb.
  • Zewnętrzny program Poczty bazy danych rejestruje aktywność i wyświetla dziennik za pośrednictwem dziennika zdarzeń aplikacji systemu Windows i widoku sysmail_event_log w bazie danych msdb.
  • Wiadomości e-mail mają jeden z czterech możliwych stanów: wysłane, niewysłane, ponawianai niepowodzenie.

Aby sprawdzić stan wiadomości e-mail, uruchom zapytanie względem msdb.dbo.sysmail_event_log widoku systemu.

Użyj Transact-SQL, aby wyświetlić stan wiadomości e-mail wysłanej przy użyciu poczty bazy danych

  • Wybierz z tabeli sysmail_allitems, określając interesujące komunikaty przez mailitem_id lub sent_status.

  • Aby sprawdzić stan zwrócony z programu zewnętrznego dla wiadomości e-mail, połącz sysmail_allitems z widokiem sysmail_event_log w kolumnie mailitem_id.

    Domyślnie program zewnętrzny nie rejestruje informacji o komunikatach, które zostały pomyślnie wysłane. Aby rejestrować wszystkie komunikaty, ustaw poziom rejestrowania na pełny, korzystając ze strony Konfigurowanie parametrów systemowych Kreatora konfiguracji poczty bazy danych .

W poniższym przykładzie wymieniono informacje o wszelkich wiadomościach e-mail wysłanych do danw, których program zewnętrzny nie mógł wysłać pomyślnie. Instrukcja zawiera listę tematu, datę i godzinę, której program zewnętrzny nie może wysłać wiadomości, oraz komunikat o błędzie z dziennika poczty bazy danych.

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