Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server Управляемый экземпляр SQL Azure
В этой статье описаны некоторые распространенные ошибки в работе компонента Database Mail и их решения.
Чтобы выполнить команды T-SQL в экземпляре SQL Server, используйте SQL Server Management Studio (SSMS),расширение MSSQL для Visual Studio Code, sqlcmd или любимое средство запросов T-SQL.
Хранимая процедура sp_send_dbmail не найдена
Хранимая процедура sp_send_dbmail установлена в базе данных msdb
. Необходимо либо запустить sp_send_dbmail
из msdb
базы данных, либо указать трехкомпонентное имя хранимой процедуры.
Пример:
EXEC msdb.dbo.sp_send_dbmail ...
Или сделайте так:
USE msdb;
GO
EXEC dbo.sp_send_dbmail ...
Используйте настройку почты базы данных для включения и настройки почты базы данных.
недопустимый профиль
Есть две возможные причины возникновения этого сообщения. Указанный профиль не существует или пользователь, выполняющий процедуру sp_send_dbmail (Transact-SQL), не имеет разрешения на доступ к этому профилю.
Чтобы проверить разрешения для профиля, выполните хранимую процедуру sysmail_help_principalprofile_sp (Transact-SQL) с именем профиля. Используйте хранимую процедуру sysmail_add_principalprofile_sp (Transact-SQL) или "Настроить почту базы данных", чтобы предоставить пользователю или группе разрешение на msdb
доступ к профилю.
Отказано в разрешении на sp_send_dbmail
В этой статье описывается, как устранить сообщение об ошибке, указывающее, что пользователь, пытающийся отправить Database Mail, не имеет разрешения на выполнение sp_send_dbmail
Текст ошибки:
EXECUTE permission denied on object 'sp_send_dbmail',
database 'msdb', schema 'dbo'.
Чтобы отправить почту базы данных, пользователи должны быть пользователем в msdb
базе данных и членом роли базы данных DatabaseMailUserRole в msdb
базе данных. Чтобы добавить пользователей или группы msdb в эту роль, используйте среду SQL Server Management Studio или выполните следующую инструкцию для пользователя или роли, которым требуется отправить сообщение Database Mail.
EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
,@membername = '<user or role name>';
GO
Дополнительные сведения см. в статье sp_addrolemember или sp_droprolemember.
Письмо поставлено в очередь, но нет записей в представлении sysmail_event_log или в журнале событий Windows
Для постановки сообщений электронной почты в очередь компонент Database Mail использует компонент Service Broker. Если компонент Database Mail остановлен или если доставка сообщений Service Broker не активирована в базе данных msdb
, служба Database Mail помещает сообщения в очередь в базе данных, но не может доставлять сообщения. В этом случае сообщения компонента Service Broker остаются в очереди Service Broker. Service Broker не активирует внешнюю программу, поэтому нет записей журнала в sysmail_event_log
и нет обновлений состояния элемента в sysmail_allitems
и в связанных представлениях.
Выполните следующую инструкцию, чтобы проверить, включен ли Компонент Service Broker в msdb
базе данных:
SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';
Значение 0
указывает, что доставка сообщений Service Broker не активируется в msdb
базе данных. Чтобы устранить проблему, активируйте компонент Service Broker в базе данных с помощью следующей команды Transact-SQL:
USE master ;
GO
ALTER DATABASE msdb SET ENABLE_BROKER ;
GO
Компонент Database Mail зависит от нескольких внутренних хранимых процедур. Для сокращения контактной зоны эти хранимые процедуры отключены во вновь установленном экземпляре SQL Server. Чтобы активировать эти хранимые процедуры, воспользуйтесь параметром Database Mail XPs (параметр конфигурации сервера) в контексте системных хранимых процедур, как показано в следующем примере:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Database Mail XPs', 1;
RECONFIGURE;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;
GO
Компонент Database Mail может быть приостановлен в msdb
базе данных. Чтобы проверить состояние Database Mail, выполните следующую инструкцию:
EXECUTE dbo.sysmail_help_status_sp;
Чтобы запустить Database Mail в базе данных узла почты, выполните следующую команду в msdb
базе данных:
EXECUTE dbo.sysmail_start_sp;
В момент активации компонент Service Broker проверяет продолжительность диалога для сообщений; сообщениям, которые находились в очереди передачи компонента Service Broker дольше, чем установлено настройками продолжительности диалога, немедленно назначается состояние ошибки. Компонент Database Mail обновляет состояние сообщений с ошибками в таблице sysmail_allitems и связанных представлениях. После этого пользователь может принять решение о целесообразности новой отправки сообщений. Дополнительные сведения о настройке времени существования диалога, которое использует Database Mail, см. в разделе sysmail_configure_sp.