通过作业执行时的 SSIS 包成功执行但不发送电子邮件

SSIS package when executed through job executes successfully but it does not send email

我有一个 SSIS 包,它有一个发送电子邮件的脚本任务。当从 Visual Studio 本地执行包时,邮件发送成功。但是,当我通过 SSIS 目录部署包、创建并执行作业时,作业成功运行但我没有收到任何邮件。 此外,当从 Integration Services Catalog 下执行包时,它执行时没有任何问题,仍然没有发送电子邮件。 我已经创建了一个使用凭据的代理帐户,我想这些步骤中的某处可能缺少 link 或设置错误。 有谁知道应该如何设置代理帐户主体?或者可能与此有关? 我已经尝试过这些:

我创建了一个 c# 控制台应用程序,仅用于电子邮件发送部分,当在同一台服务器上执行该应用程序时,它可以毫无问题地发送电子邮件。


我的问题的其他信息:

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; 

我写了 an article 关于那个。

如果您使用的是 Gmail、Outlook365 或任何其他需要 2FA 的 SMTP 服务器,您必须关闭该电子邮件地址的 2FA 才能成功。

在同一篇文章的底部,您可以找到可用于设置新电子邮件地址的查询。

编辑:

然后使用 SSIS 使用您已成功创建的 SQL 服务器帐户发送电子邮件:

https://www.sqlshack.com/ssis-execute-t-sql-statement-task-vs-execute-sql-task/

EXEC msdb.dbo.sp_send_dbmail
     @profile_name = 'Your_Profile_Name',
     @recipients = 'Use a valid e-mail address',
     @body = 'The database mail configuration was completed successfully.',
     @subject = 'Automated Success Message';
GO

编辑 2:

显然有多种方法可以在 T-SQL 语句任务中添加变量:

感谢 Francesco,我最终选择了参数化的“执行 SQL 任务”方法,配置了数据库邮件,并建议使用脚本:

EXEC msdb.dbo.sp_send_dbmail
     @profile_name = 'Your_Profile_Name',
     @recipients = 'Use a valid e-mail address',
     @body = 'The database mail configuration was completed successfully.',
     @subject = 'Automated Success Message';
GO