Устранение неполадок компонента Database Mail: основные шаги
Устранение неполадок с компонентом Database Mail включает проверку следующих основных областей системы Database Mail. Эти процедуры перечислены в логическом порядке, однако порядок выполнения может быть любым другим.
Определение того, включен ли компонент 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 не включается автоматически, что сделано для уменьшения числа функций, доступных для атаки злонамеренным пользователем. Дополнительные сведения см. в разделе Основные сведения о настройке контактной зоны.
Если принято решение о необходимости включения компонента Database Mail, выполните следующий код:
sp_configure 'Database Mail XPs', 1; GO RECONFIGURE; GO
Чтобы восстановить процедуру sp_configure в состояние по умолчанию, в котором не отображаются дополнительные параметры, выполните следующий код:
sp_configure 'show advanced', 0; GO RECONFIGURE; GO
Проверка правильности настроек пользователей для отправки сообщений с помощью компонента Database Mail
Для отправки сообщений через компонент Database Mail пользователь должен быть членом роли DatabaseMailUserRole. Члены предопределенной роли сервера sysadmin и роли msdbdb_owner автоматически являются членами роли DatabaseMailUserRole. Для получения списка всех членов роли DatabaseMailUserRole выполните следующую инструкцию:
EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
Для предоставления пользователю роли DatabaseMailUserRole выполните следующую инструкцию:
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, попробуйте остановить ее с помощью процедуры sysmail_stop_sp, а затем запустить заново процедурой sysmail_start_sp.
Примечание |
---|
Столбец length в результирующем наборе процедуры sysmail_help_queue_sp позволяет определить количество сообщений электронной почты, находящихся в очереди. |
Определение того, относятся ли проблемы с компонентом Database Mail ко всем учетным записям профиля или только к некоторым из них
Если выяснилось, что отправлять почту могут только некоторые профили, проблема, вероятно, относится к учетным записям компонента 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 для повторной попытки доставки сообщения
Если обнаружилось, что в работе компонента Database Mail происходят сбои из-за недоступности SMTP-сервера, можно повысить число успешных доставок путем увеличения числа попыток, предпринимаемых компонентом Database Mail при отправке каждого сообщения. Запустите мастер настройки компонента Database Mail и выберите Просмотр или изменение системных параметров. Можно также связать с профилем несколько учетных записей; в этом случае, при наличии отказоустойчивой главной учетной записи, компонент Database Mail будет использовать ее для отправки сообщений.
На странице настроек системных параметров значения по умолчанию 5 для параметра Количество попыток применения учетной записи и 60 секунд для Интервала между попытками применения учетной записи означают, что доставка сообщения не удалась, если SMTP-сервер был недоступен в течение 5 минут. Увеличьте значения этих параметров чтобы продлить время ожидания в во время отправки сообщения.
Примечание |
---|
При массовой отправке сообщений большие значения по умолчанию могут повысить надежность, но при этом они существенно повышают потребление ресурсов, так как приводят к многократным попыткам отправки большого количества сообщений. Лучше выявите и устраните первопричину этого явления, которая может оказаться проблемой сети или SMTP-сервера, мешающей компоненту Database Mail нормально соединяться с SMTP-сервером. |
Безопасность
Для устранения неполадок любого рода с компонентом Database Mail необходимо быть членом предопределенной роли сервера sysadmin. Пользователи, не являющиеся членами предопределенной роли сервера sysadmin, могут только получать сведения о сообщениях, которые они пытались отправить. Сведения о сообщениях других пользователей им недоступны.
См. также