Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server
Azure 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 danychmsdb
. - 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 danychmsdb
. - 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 przezmailitem_id
lubsent_status
.Aby sprawdzić stan zwrócony z programu zewnętrznego dla wiadomości e-mail, połącz
sysmail_allitems
z widokiemsysmail_event_log
w kolumniemailitem_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