在我的存储过程中,我使用sp_send_email发送电子邮件。我的存储过程将在不同的环境中运行;有些人会启用电子邮件,有些则不会。
如果我在没有启用sp_send_email的情况下运行它,我(非常正确)会收到此错误消息
SQL Server阻止访问组件“Database Mail XPs”的过程“dbo.sp_send_dbmail”,因为此组件已作为此服务器安全配置的一部分关闭。
我想检查是否先启用了电子邮件,因此我可以通过执行以下操作来避免错误:
IF @is_enabled
BEGIN
EXEC sp_send_email ...
END
如何正确设置@is_enabled?
答案 0 :(得分:5)
您可以查询sys.configurations
IF EXISTS (SELECT *
FROM sys.configurations
WHERE name = 'Database Mail XPs' AND value_in_use = 1)
PRINT 'enabled'
ELSE
PRINT 'no luck'
,非系统管理员用户可能看不到它
答案 1 :(得分:0)
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Database Mail XPs';
GO
sp_send_mail
属于“Database Mail XPs”保护伞。您的应用程序可能无权运行sp_configure
和RECONFIGURE
,因此如果您只是尝试调用sp_send_mail
并处理错误,最终可能会更好。
答案 2 :(得分:-1)
BOL说:
要发送数据库邮件,用户必须是msdb数据库中的用户,并且是msdb数据库中DatabaseMailUserRole数据库角色的成员。要将msdb用户或组添加到此角色,请使用SQL Server Management Studio或对需要发送数据库邮件的用户或角色执行以下语句。
因此,您可以向用户提供适当的角色:
EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
,@membername = '<user or role name>'; GO