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


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

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

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

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

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

  1. Во-первых, чтобы убедиться, что компонент Database Mail включен, используйте Database Mail XPs (параметр конфигурации сервера) в sp_configure системной хранимой процедуре, как в следующем примере:

    EXEC sp_configure 'show advanced', 1;  
    RECONFIGURE; 
    EXEC sp_configure; 
    GO
    
  2. Затем выполните следующую инструкцию в msdb базе данных, чтобы проверить состояние очереди почты:

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

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

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

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

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

Состояние неотправлено указывает, что Database Mail внешняя программа еще не обработала сообщение электронной почты.

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

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

Примечание.

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

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

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

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

Состояние отправлено означает, что внешняя программа компонента Database Mail успешно доставила электронное сообщение SMTP-серверу.

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

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

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

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

Следующий шаг