Поделиться через


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

Область применения: SQL Server Управляемый экземпляр SQL Azure

В этой статье описывается, как проверить состояние сообщения электронной почты, отправленного с помощью компонента Database Mail в SQL Server с помощью Transact-SQL.

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

Чтобы проверить состояние сообщения электронной почты, выполните запрос в системном представлении msdb.dbo.sysmail_event_log .

Используйте Transact-SQL для просмотра статуса электронной почты, отправленной с помощью Database Mail

  • Выберите из 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