Как проверить состояние сообщений электронной почты, отправленных при помощи компонента 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. Для проверки состояния сообщений электронной почты запустите запрос для данного представления. Сообщения электронной почты могут иметь одно из четырех возможных состояний: отправлено, не отправлено, попытка отправки и ошибка при отправке.
Проверка состояния сообщения электронной почты
Выберите из таблицы sysmail_allitems важные сообщения, используя поля mailitem_id или sent_status.
Чтобы проверить состояние сообщений электронной почты, возвращенных из внешней программы, соединение 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
См. также