Устранение неполадок компонента Database Mail: письмо, поставленное в очередь, не доставляется

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

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

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

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

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

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.

Состояние сообщения «unsent»

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

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

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

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

Состояние сообщения «retrying»

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

Состояние сообщения «sent»

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

Состояние сообщения «failed»

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