Общие действия по устранению неполадок с Database Mail
Область применения: SQL Server Управляемый экземпляр SQL Azure
Устранение неполадок с компонентом Database Mail включает проверку следующих основных областей системы Database Mail. Эти процедуры перечислены в логическом порядке, однако порядок выполнения может быть любым другим.
Разрешения
Для устранения неполадок любого рода с компонентом Database Mail необходимо быть членом предопределенной роли сервера sysadmin. Пользователи, не являющиеся членами предопределенных ролей сервера sysadmin, могут получать только сведения о сообщениях электронной почты, которые они пытаются отправить, а не о сообщениях электронной почты, отправленных другими пользователями.
Включен ли компонент Database Mail
В среде 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.
Если вы решите, что необходимо включить Database Mail, выполните следующий код:
sp_configure 'Database Mail XPs', 1; GO RECONFIGURE; GO
Чтобы восстановить процедуру sp_configure до состояния по умолчанию, которое не отображает расширенные параметры, выполните следующий код:
sp_configure 'show advanced', 0; GO RECONFIGURE; GO
Правильно ли у пользователей настроена отправка почты
Чтобы отправить database Mail, пользователи должны быть членом роли базы данных DatabaseMailUserRole в
msdb
базе данных. Члены предопределенной роли сервера sysadmin иmsdb
db_owner роли автоматически входят в роль DatabaseMailUserRole . Чтобы перечислить все остальные члены DatabaseMailUserRole , выполните следующую инструкцию:EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
Чтобы добавить пользователей в роль DatabaseMailUserRole , используйте следующую инструкцию:
USE msdb; GO sp_addrolemember @rolename = 'DatabaseMailUserRole' ,@membername = '<database user>';
Для отправки сообщений через компонент Database Mail пользователям необходим доступ как минимум к одному из его профилей. Для получения списка пользователей (участников) и профилей, к которым у них есть доступ, выполните следующую инструкцию:
EXEC msdb.dbo.sysmail_help_principalprofile_sp;
Воспользуйтесь мастером настройки компонента Database Mail, чтобы создавать профили и предоставлять пользователям доступ к ним.
Запущен ли компонент Database Mail
Внешняя программа компонента Database Mail активируется, когда нужно выполнить обработку электронных сообщений. Если в течение указанного времени ожидания сообщений для отправки нет, программа завершает работу. Для подтверждения активации компонента Database Mail выполните следующую инструкцию:
EXEC msdb.dbo.sysmail_help_status_sp;
Если активация Database Mail не запущена, выполните следующую инструкцию, чтобы запустить ее:
EXEC msdb.dbo.sysmail_start_sp;
Если запущена внешняя программа компонента 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
, чтобы определить количество сообщений электронной почты в очереди почты.
Проблемы оказывают влияние лишь на некоторые или на все учетные записи
Если вы определили, что некоторые, но не все профили могут отправлять почту, у вас могут возникнуть проблемы с учетными записями Database Mail, используемыми профилями проблем. Чтобы определить, какие из учетных записей успешно отправляют почтовые сообщения, выполните следующую инструкцию:
SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;
Если нерабочий профиль не использует ни одну из перечисленных учетных записей, возможно, что все учетные записи, доступные для профиля, не работают должным образом. Для проверки отдельных учетных записей воспользуйтесь мастером настройки компонента Database Mail для создания нового профиля с единственной учетной записью и затем используйте диалоговое окно "Отправка тестового сообщения", чтобы отправить почту через новую учетную запись.
Для просмотра сообщений об ошибках, возвращаемых компонентом Database Mail, выполните следующую инструкцию:
SELECT * FROM msdb.dbo.sysmail_event_log;
Примечание.
Компонент Database Mail считает почтовое сообщение отправленным, когда оно успешно доставлено на почтовый SMTP-сервер. Успешной доставке сообщения могут помешать и другие ошибки, возникшие при дальнейшей обработке (например неверный адрес получателя), но они уже не отражаются в журнале компонента Database Mail.
Повторите попытку доставки сообщения
Если вы определили, что компонент Database Mail завершается ошибкой, так как SMTP-сервер не может быть надежно достигнут, вы можете увеличить частоту успешной доставки почты, увеличив число попыток отправки каждого сообщения. Запустите мастер настройки компонента Database Mail и выберите "Просмотр или изменение системных параметров". Кроме того, можно связать больше учетных записей с профилем, чтобы после отработки отказа из основной учетной записи Database Mail использовала учетную запись отработки отказа для отправки сообщений электронной почты.
На странице "Настройка системных параметров" значения по умолчанию в пять раз для попыток повторных попыток учетной записи и 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;