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


Устранение неполадок компонента Database Mail: основные шаги

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

Определение того, включен ли компонент 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 не включается автоматически, что сделано для уменьшения числа функций, доступных для атаки злонамеренным пользователем. Дополнительные сведения см. в разделе Основные сведения о настройке контактной зоны.

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

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

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

Проверка правильности настроек пользователей для отправки сообщений с помощью компонента Database Mail

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

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

    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, попробуйте остановить ее с помощью процедуры sysmail_stop_sp, а затем запустить заново процедурой sysmail_start_sp.

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

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

Определение того, относятся ли проблемы с компонентом Database Mail ко всем учетным записям профиля или только к некоторым из них

  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.

Настройка компонента Database Mail для повторной попытки доставки сообщения

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

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

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

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

Безопасность

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