SSIS包部署后作业执行成功但未发邮件,代理账户配置咨询
核心原因定位
首先你的脚本存在异常吞噬问题:catch块中没有任何错误日志/抛出逻辑,即使邮件发送失败,任务也会强制返回Success状态,这就是你看到执行成功但收不到邮件的直接原因。你需要先修改代码暴露真实错误:
把catch块修改为:
catch (Exception ex) { // 抛出错误到SSIS日志,方便排查 Dts.Events.FireError(0, "SendMailTask", ex.Message + "\r" + ex.StackTrace, string.Empty, 0); Dts.TaskResult = (int)ScriptResults.Failure; return; }
同时在SmtpClient初始化后添加TLS1.2配置(Office365已强制要求TLS1.2,低版本.NET环境默认未启用):
SmtpClient SmtpServer = new SmtpClient(SMTPServerName); // 新增TLS配置 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
代理账户配置校验
你遇到的问题大概率和代理/执行身份权限有关,按以下步骤检查配置:
1. 不同执行场景的身份差异
- 直接在SSIS Catalog中手动执行包:默认使用SQL Server数据库引擎服务账户运行,不是你配置的代理账户
- SQL Server作业中执行SSIS包:才会使用你配置的代理账户运行
所以两种场景都要检查对应身份的权限。
2. 代理账户正确配置步骤
- 凭据配置:确保凭据对应的Windows账户密码正确、未过期、未被锁定,该账户有权限访问外部网络(访问Office365 SMTP服务的587端口)
- 子系统权限:代理账户必须勾选「SQL Server Integration Services 包执行」子系统权限
- SSIS权限:代理账户(以及手动执行用的SQL服务账户)需要对SSIS Catalog中对应项目/包有读取、执行权限,同时有权限读取项目的敏感参数(
SenderPassword是敏感参数)
其他必查项
- 部署后项目参数校验:确认SSIS Catalog中项目的
Sender、SenderPassword、ToMail、SMTPServerName、Port参数值和本地测试用的参数完全一致,敏感参数SenderPassword部署时已正确填写 - 服务器网络校验:确认SQL Server所在服务器的防火墙已开放出站587端口,没有拦截访问Office365 SMTP服务的请求
内容的提问来源于stack exchange,提问作者Erika_h
相关产品推荐
相关产品推荐

