Общие действия по устранению неполадок с Database Mail

Применимо к:Управляемому экземпляру SQL Server Azure

Устранение неполадок с компонентом Database Mail включает проверку следующих основных областей системы Database Mail. Эти процедуры перечислены в логическом порядке, однако порядок выполнения может быть любым другим.

Разрешения

Для устранения неполадок любого рода с компонентом Database Mail необходимо быть членом предопределенной роли сервера sysadmin. Пользователи, не являющиеся членами предопределенных ролей сервера sysadmin, могут получать только сведения о сообщениях электронной почты, которые они пытаются отправить, а не о сообщениях электронной почты, отправленных другими пользователями.

Включен ли компонент Database Mail

  1. В среде SQL Server Management Studio подключитесь к экземпляру SQL Server в окне редактора запросов, после чего выполните следующий код:

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

    В области результатов убедитесь, что run_value для Database Mail XPs имеет значение 1. Если run_value не равно 1, компонент Database Mail не включен. Компонент Database Mail не включен автоматически, чтобы уменьшить количество функций, доступных для атаки злоумышленником. Дополнительные сведения см. в разделе Основные сведения о настройке контактной зоны в библиотеке MSDN.

  2. Если вы решите, что необходимо включить Database Mail, выполните следующий код:

    sp_configure 'Database Mail XPs', 1; 
    GO
    RECONFIGURE;
    GO
    
  3. Чтобы восстановить процедуру sp_configure до состояния по умолчанию, которое не отображает расширенные параметры, выполните следующий код:

    sp_configure 'show advanced', 0; 
    GO
    RECONFIGURE;
    GO
    

Правильно ли у пользователей настроена отправка почты

  1. Чтобы отправить database Mail, пользователи должны быть членом роли базы данных DatabaseMailUserRole в msdb базе данных. Члены предопределенной роли сервера sysadmin и msdbdb_owner роли автоматически входят в роль DatabaseMailUserRole . Чтобы перечислить все остальные члены DatabaseMailUserRole , выполните следующую инструкцию:

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    
  2. Чтобы добавить пользователей в роль DatabaseMailUserRole , используйте следующую инструкцию:

    USE msdb;
    GO
    
    sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<database user>';
    
  3. Для отправки сообщений через компонент Database Mail пользователям необходим доступ как минимум к одному из его профилей. Для получения списка пользователей (участников) и профилей, к которым у них есть доступ, выполните следующую инструкцию:

    EXEC msdb.dbo.sysmail_help_principalprofile_sp;
    
  4. Воспользуйтесь мастером настройки компонента Database Mail, чтобы создавать профили и предоставлять пользователям доступ к ним.

Запущен ли компонент Database Mail

  1. Внешняя программа компонента Database Mail активируется, когда нужно выполнить обработку электронных сообщений. Если в течение указанного времени ожидания сообщений для отправки нет, программа завершает работу. Для подтверждения активации компонента Database Mail выполните следующую инструкцию:

    EXEC msdb.dbo.sysmail_help_status_sp;
    
  2. Если активация Database Mail не запущена, выполните следующую инструкцию, чтобы запустить ее:

    EXEC msdb.dbo.sysmail_start_sp;
    
  3. Если запущена внешняя программа компонента Database Mail, проверьте состояние очереди почты с помощью следующей инструкции:

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

    Очередь почты должна иметь состояние RECEIVES_OCCURRING. В различные моменты времени состояние очереди может изменяться. Если состояние очереди почты не RECEIVES_OCCURRINGзадано, попробуйте перезапустить очередь. Остановите очередь при помощи следующей инструкции.

EXEC msdb.dbo.sysmail_stop_sp;

Запустите очередь при помощи следующей инструкции.

EXEC msdb.dbo.sysmail_start_sp;

Заметка

Используйте столбец длины в результирующем наборе sysmail_help_queue_sp , чтобы определить количество сообщений электронной почты в очереди почты.

Проблемы оказывают влияние лишь на некоторые или на все учетные записи

  1. Если вы определили, что некоторые, но не все профили могут отправлять почту, у вас могут возникнуть проблемы с учетными записями Database Mail, используемыми профилями проблем. Чтобы определить, какие из учетных записей успешно отправляют почтовые сообщения, выполните следующую инструкцию:

    SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;
    
  2. Если нерабочий профиль не использует ни одну из перечисленных учетных записей, возможно, что все учетные записи, доступные для профиля, не работают должным образом. Для проверки отдельных учетных записей воспользуйтесь мастером настройки компонента Database Mail для создания нового профиля с единственной учетной записью и затем используйте диалоговое окно "Отправка тестового сообщения", чтобы отправить почту через новую учетную запись.

  3. Для просмотра сообщений об ошибках, возвращаемых компонентом Database Mail, выполните следующую инструкцию:

    SELECT * FROM msdb.dbo.sysmail_event_log;
    

    Заметка

    Компонент Database Mail считает почтовое сообщение отправленным, когда оно успешно доставлено на почтовый SMTP-сервер. Успешной доставке сообщения могут помешать и другие ошибки, возникшие при дальнейшей обработке (например неверный адрес получателя), но они уже не отражаются в журнале компонента Database Mail.

Повторите попытку доставки сообщения

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

  2. На странице "Настройка системных параметров" значения по умолчанию в пять раз для попыток повторных попыток учетной записи и 60 секунд для задержки повторных попыток учетной записи означает, что доставка сообщений завершится ошибкой, если SMTP-сервер не может быть достигнут в течение 5 минут. Увеличьте значения этих параметров, чтобы продлить время ожидания во время отправки сообщения.

    Заметка

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

Проверка включения компонента Service Broker для msdb

Для базы данных требуется, чтобы компонент Service Broker был включен для msdb базы данных. Проверьте, включен msdb ли компонент Service Broker со следующим скриптом T-SQL:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb' ; -- should be 1

Если этот параметр не включен, необходимо включить брокер служб. В следующем примере скрипта требуется эксклюзивный доступ к msdb системным базам данных, поэтому это может оказаться невозможным для выполнения в течение типичных рабочих часов. Дополнительные сведения см. в статье об ALTER DATABASE ... SET ENABLE_BROKER.

ALTER DATABASE msdb SET ENABLE_BROKER;

Далее