Как проверить состояние сообщений электронной почты, отправленных при помощи компонента Database Mail (Transact-SQL)

Компонент Database Mail хранит копии исходящих сообщений электронной почты и отображает их в представлениях sysmail_allitems, sysmail_sentitems, sysmail_unsentitems, sysmail_faileditems базы данных msdb. Внешняя программа компонента Database Mail протоколирует активность и отображает журнал при помощи компонента Windows Application Event Log и представления sysmail_event_log базы данных msdb. Для проверки состояния сообщений электронной почты запустите запрос для данного представления. Сообщения электронной почты могут иметь одно из четырех возможных состояний: отправлено, не отправлено, попытка отправки и ошибка при отправке.

Проверка состояния сообщения электронной почты

  1. Выберите из таблицы sysmail_allitems важные сообщения, используя поля mailitem_id или sent_status.

  2. Чтобы проверить состояние сообщений электронной почты, возвращенных из внешней программы, соединение sysmail_allitems с представлением sysmail_event_log столбца mailitem_id, как показано в следующем разделе.

ПримечаниеПримечание

По умолчанию внешняя программа не протоколирует сведения об успешно посланных сообщениях. Для протоколирования всех сообщений установите детализированный уровень ведения журнала на странице Установка параметров системы окна Мастер настройки компонента Database Mail.

Пример

В следующем примере приводятся данные о любых сообщениях электронной почты, отправленных danw, которые внешняя программа не смогла успешно отправить. Инструкция выдает тему, дату и время попытки отправки сообщения, при отправке которого внешней программой произошла ошибка, а также текст сообщения об ошибке из журнала компонента Database Mail.

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