Почта базы данных: почта в очереди, а не доставлена

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

В этом подразделе описывается, как решать проблему, когда электронное сообщение успешно ставится в очередь, но не доставляется.

Диагностика проблемы

Внешняя программа компонента Database Mail ведет журнал активности электронной почты в базе данных msdb.

Чтобы убедиться, что компонент Database Mail включен, воспользуйтесь параметром Database Mail XPs системной хранимой процедуры sp_configure, как в следующем примере.

EXEC sp_configure 'show advanced', 1;  
RECONFIGURE; 
EXEC sp_configure; 
GO

Затем, чтобы проверить состояние почтовой очереди, выполните следующую инструкцию в базе данных msdb:

EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'Mail';

Подробное описание столбцов см. в разделе sysmail_help_queue_sp (Transact-SQL).

Проверьте, есть ли какие-либо изменения представления sysmail_event_log. В этом представлении должна находиться запись, удостоверяющая, что запущена внешняя программа компонента Database Mail. Если ее нет в представлении sysmail_event_log, см. раздел Сообщение поставлено в очередь, но записей нет в sysmail_event_log. Если в представлении sysmail_event_log появились ошибки, устраните их.

Если в представлении sysmail_event_log есть записи, свидетельствующие о запуске внешней программы, проверьте сообщения о состоянии в представлении sysmail_allitems.

Состояние сообщения — не отправлено

Состояние не отправлено означает, что внешняя программа компонента Database Mail еще не обработала электронное сообщение. Иногда она не очень быстро это делает, скорость их обработки зависит от параметров сети, времени ожидания перед повтором, объема сообщений и ресурсов SMTP-сервера. Если проблема остается, попробуйте отсылать сообщения из нескольких профилей и с нескольких SMTP-серверов.

Проверьте последнюю дату успешной отправки сообщений. Если после последней успешной отправки прошло много времени, через представление sysmail_event_log убедитесь, что внешняя программа была успешно запущена компонентом Service Broker. Если последняя попытка активировать программу завершилась ошибкой, убедитесь, что внешняя программа компонента Database Mail находится в верном каталоге и учетная запись службы SQL Server имеет разрешения на ее запуск.

Примечание.

Чтобы удалить старые неотправленные сообщения, дождитесь момента, когда они станут самыми старыми сообщениями в очереди, а затем воспользуйтесь хранимой процедурой sysmail_delete_mailitems_sp для их удаления.

Состояние сообщения — идет повтор

Состояние «retrying» свидетельствует о том, что компонент Database Mail попытался доставить сообщение, но SMTP-сервер не смог этого сделать. Обычно причиной служат ошибки в сети, сбой SMTP-сервера или неправильная конфигурация учетной записи компонента Database Mail. Рано или поздно это сообщение будет отправлено или не отправлено и сохранено в состоянии ошибки и с записью в журнале событий.

Состояние сообщения — отправлено

Состояние отправлено означает, что внешняя программа компонента Database Mail успешно доставила электронное сообщение SMTP-серверу. Если у получателя сообщение не появилось, то это означает, что SMTP-сервер принял сообщение от компонента Database Mail, но не смог доставить его получателю. Проверьте журналы SMTP-сервера или свяжитесь с его администратором. SMTP-сервер также можно проверить с помощью другого почтового клиента, например Outlook Express.

Состояние сообщения — сбой

Состояние "Сбой" означает, что внешняя программа компонента Database Mail не смогла доставить электронное сообщение SMTP-серверу. В этом случае в представлении sysmail_event_log есть подробные сведения, полученные из внешней программы. Образец запроса, соединяющего представления sysmail_faileditems и sysmail_event_log для получения сообщений об ошибках, см. в разделе Проверка состояния сообщений электронной почты, отправленных при помощи компонента Database Mail. Наиболее частая причина ошибок — неверный адрес получателя, проблемы в сети, из-за которых внешняя программа не может использовать учетные записи отработки отказа. Проблемы SMTP-сервера также могут быть причиной того, что сообщения сервером отклоняются. Чтобы выяснить, где происходит ошибка, в мастере настройки компонента Database Mail измените значение параметра Уровень ведения журнала на Подробный и отправьте тестовое сообщение.

См. также