You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Agent作业执行sp_send_dbmail存储过程成功但邮件未送达问题咨询

问题排查解决步骤

1. 优先查看数据库邮件日志定位具体错误

sp_send_dbmail执行时仅将邮件加入发送队列,不会因后续发送/执行失败抛出导致作业终止的错误,搭配你使用的@exclude_query_output = 1参数会直接吞掉执行过程中的错误信息,首先执行以下语句查询错误日志:

-- 查询发送失败的邮件记录
SELECT * FROM msdb.dbo.sysmail_faileditems ORDER BY send_request_date DESC;
-- 查询数据库邮件的详细事件日志
SELECT * FROM msdb.dbo.sysmail_event_log ORDER BY log_date DESC;

常见报错会直接提示是权限不足、查询执行失败、邮件服务器拒绝投递等问题。

2. 排查遗漏的权限配置

你已经配置了目标库的读写权限,还有两个极易遗漏的权限点需要确认:

  • 作业运行账号SQLAgtAct需要在msdb库中被授予DatabaseMailUserRole角色,才能调用sp_send_dbmail存储过程。
  • 确认你使用的邮件配置文件Active_users是公共配置文件,或者SQLAgtAct被授权可使用该私有配置文件。
  • 可手动模拟账号执行验证权限:
    EXECUTE AS USER = 'SQLAgtAct';
    -- 这里粘贴你的存储过程代码执行
    REVERT;
    
    若执行时报错可直接定位问题。

3. 修正@query参数的配置遗漏

你当前代码未指定@execute_query_database参数,即使查询语句写了全限定名,仍可能出现执行上下文跳转的问题,在sp_send_dbmail参数中补充:

@execute_query_database = '你的目标数据库名'

同时确认查询中的[database].[db].[teste1]的架构名[db]拼写正确,SQLAgtAct对该架构下的表没有显式拒绝的访问权限。

4. 排查邮件投递相关问题

  • 先测试无附件的邮件是否能正常发送:将@attach_query_result_as_file改为0,若能收到邮件说明是附件相关问题,可检查数据库邮件配置的最大附件大小限制:
    SELECT * FROM msdb.dbo.sysmail_configuration WHERE param_name = 'MaxFileSize';
    
  • 确认企业邮件网关没有拦截带csv附件的邮件,可先把收件人改成配置数据库邮件时用的发件人地址测试,排除收件人侧的拦截规则。

5. 确认作业运行身份

检查SQL Agent作业步骤的「运行身份」配置,确认确实是使用SQLAgtAct账号运行,而非其他权限不足的代理账户。


内容的提问来源于stack exchange,提问作者Luis Luis Maia Maia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:57:02