代码之家  ›  专栏  ›  技术社区  ›  harriyott Erik Funkenbusch

执行前检查sp_发送_电子邮件权限

  •  0
  • harriyott Erik Funkenbusch  · 技术社区  · 15 年前

    在我的存储过程中,我使用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_已启用?

    3 回复  |  直到 15 年前
        1
  •  5
  •   gbn    15 年前

    sys.configurations

    IF EXISTS (SELECT *
           FROM sys.configurations
           WHERE name = 'Database Mail XPs' AND value_in_use = 1)
        PRINT 'enabled'
    ELSE
        PRINT 'no luck'
    

    缺点是它可能对非系统管理员用户不可见,因为 "MetaData Visibility"

        2
  •  0
  •   Remus Rusanu    15 年前
    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'Database Mail XPs';
    GO
    

    这个 sp_send_mail 属于 Database Mail XPs sp_configure RECONFIGURE 发送邮件 并处理错误。

        3
  •  -1
  •   Alex_L    15 年前

    波尔说:

    要发送数据库邮件,用户必须是msdb数据库中的用户和msdb数据库中DatabaseMailUserRole数据库角色的成员。要将msdb用户或组添加到此角色,请使用SQL Server Management Studio,或对需要发送数据库邮件的用户或角色执行以下语句。

    EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
        ,@membername = '<user or role name>'; GO