【发布时间】:2021-11-23 20:20:45
【问题描述】:
我有一个 SSIS 包,它有一个发送电子邮件的脚本任务。从 Visual Studio 本地执行包时,电子邮件已成功发送。但是,当我通过 SSIS 目录部署包、创建并执行作业时,作业成功运行但我没有收到任何邮件。 此外,从集成服务目录下执行包时,它执行没有任何问题,仍然没有发送电子邮件。 我创建了一个使用凭据的代理帐户,我猜这些步骤中的某处可能存在缺少链接或设置错误。 有谁知道应该如何设置代理帐户主体?或者可能与此有关? 我已经尝试过这些:
我创建了一个 c# 控制台应用程序,仅用于电子邮件发送部分,当在同一台服务器上执行该应用程序时,它可以毫无问题地发送电子邮件。
我的问题的其他信息:
- 所以最初我也遇到了任务版本问题 (SSIS: script task (vs15) not work when deploy on sql server 2014),但是在使用正确的 ISDeploymentWizard.exe 重新部署它之后,这个问题就解决了。
- 我也在使用Office365,但是2FA被关闭了,并且在从Visual Studio执行脚本任务时发送电子邮件没有任何问题(所以当包执行失败时,它正确地转到事件处理程序,执行脚本任务,并且邮件已发送)。
- 我已配置代理帐户来执行 SSIS 包,它适用于其他包/步骤。
- 我在脚本任务后面有以下脚本:
String SendMailFrom = Dts.Variables["$Project::Sender"].Value.ToString();
String SendMailFromPassword = Dts.Variables["$Project::SenderPassword"].GetSensitiveValue().ToString();
String SendMailTo = Dts.Variables["$Project::ToMail"].Value.ToString();
String SMTPServerName = Dts.Variables["$Project::SMTPServerName"].Value.ToString();
int SMTPServerPort = int.Parse(Dts.Variables["$Project::Port"].Value.ToString());
String PackageName = Dts.Variables["System::PackageName"].Value.ToString();
String ErrorDescription = Dts.Variables["System::ErrorDescription"].Value.ToString();
String ErrorCode = Dts.Variables["System::ErrorCode"].Value.ToString();
String SourceName = Dts.Variables["System::SourceName"].Value.ToString();
String Subject = PackageName + " Package Failed On " + DateTime.Now.ToString();
String Message = PackageName + " Package Failed On " + DateTime.Now.ToString();
try
MailMessage email = new MailMessage();
SmtpClient SmtpServer = new SmtpClient(SMTPServerName);
// START
email.From = new MailAddress(SendMailFrom);
email.To.Add(SendMailTo);
email.Subject = Subject;
email.Body = Message;
//END
SmtpServer.Port = SMTPServerPort;
SmtpServer.UseDefaultCredentials = false;
SmtpServer.Credentials = new System.Net.NetworkCredential(SendMailFrom, SendMailFromPassword);
SmtpServer.EnableSsl = true;
SmtpServer.Send(email);
}
catch (Exception ex)
{
}
Dts.TaskResult = (int)ScriptResults.Success;
【问题讨论】:
-
请出示您的脚本任务代码minimal reproducible example。
-
感谢您的反馈,我已在说明中添加了其他信息
-
你正在用那个空的
catch吞下所有异常——要么重新抛出异常,要么将它们记录为 SSIS 进程错误,或者完全删除try-catch。您需要找出到底出了什么问题,而空的catch目前将其隐藏起来。
标签: sql-server ssis ssms jobs