Проверка Если успешно выполнен sp_send_dbmail
Я ищу способ проверить, будут ли в конечном итоге sp_send_dbmail
очереди электронной почты с помощью sp_send_dbmail
отправлены с нашего сервера Exchange. Я просмотрел системные таблицы msdb.dbo.sysmail_mailitems
и msdb.dbo.sysmail_log
. msdb.dbo.sysmail_log
кажется более полезным из двух; в частности, колонку description
. Из тестов, которые я провел до сих пор, кажется, что всякий раз, когда возникает ошибка, в колонке description
появляется сообщение в следующем формате:
Не удалось отправить почту получателям из-за сбоя почтового сервера. (Отправка почты с использованием учетной записи 3 (2012-11-01T11: 28: 04) Сообщение об исключении: не удается отправить почту на почтовый сервер (почтовый ящик недоступен. Ответ сервера: 5.7.1 Не удалось передать для [email protected]).)
Это связано с другими строками, которые имеют один и тот же process_id
. Описание прилагаемых записей
Процесс DatabaseMail запущен
а также
Процесс DatabaseMail закрывается
Если сообщение электронной почты было успешно отправлено, в таблице записаны те же 2 строки, за исключением того, что между ними нет закрытых строк.
Поэтому, если у меня есть успешная отправка, в таблице появляется следующее:
![enter image description here]()
и если у меня есть отказ отправки, журнал регистрирует это
![enter image description here]()
Существуют ли другие экземпляры того, как записи могут регистрироваться, если сбой отправки или успешная передача? Например, возможно ли, что есть 4 строки записей для отправки (2 прилагается, когда он был запущен и когда он закрывается, и 2 заключенных, в которых сообщение электронной почты было успешно отправлено). Я не нашел записей журналов, которые отличались от приведенного выше шаблона, но хотелось бы убедиться, прежде чем писать логику на основе этого предположения.
Ответы
Ответ 1
Эта ссылка от Microsoft кажется полезной - Как проверить статус сообщений электронной почты, отправленных с помощью почты базы данных (Transact-SQL). См. Также связанные темы по ведению журналов и аудиту базы данных, устранению неполадок с почтой базы данных.
Ответ 2
sysmail_faileditems
выведет список sysmail_faileditems
писем. Если вам нужно просмотреть список успешных электронных писем, вам нужно использовать sysmail_mailitems
.
Используйте приведенный ниже запрос, чтобы получить подробную информацию для всех отправленных электронной почты той же даты:
SELECT * FROM msdb..sysmail_mailitems WHERE sent_date > DATEADD(DAY, -1,GETDATE())
И вот полный запрос на получение всех неудачных писем за последние 24 часа:
SELECT items.subject ,
items.recipients ,
items.copy_recipients ,
items.blind_copy_recipients ,
items.last_mod_date ,
l.description
FROM msdb.dbo.sysmail_faileditems AS items
LEFT OUTER JOIN msdb.dbo.sysmail_event_log AS l
ON items.mailitem_id = l.mailitem_id
WHERE items.last_mod_date > DATEADD(DAY, -1,GETDATE())