我有一个 SSIS 包,可以从通过管道传递的数据集中检测测试域。我使用脚本组件发送电子邮件通知,其中列出了已标记为测试域的域。当我第一次发布带有通知的包时,它为每个域发送了一封单独的电子邮件,在收到许多电子邮件后,我将脚本更改为发送一封包含测试域列表的电子邮件。但是,每次我发布此更新时,它都会继续为每个测试域发送一个通知。
我调查过的事情:
- 第一封邮件和第二封邮件的内容不同。因此,我在 Notepad++ 中进行了“在文件中查找”搜索,以查看是否可以找到原始电子邮件内容的存储位置。没有找到包含原始内容的结果。
- 我已禁用发送通知并发布包的步骤。这将导致不发送通知电子邮件。但是,当我重新启用该步骤并发布时,为每个测试域发送一封电子邮件的原始通知会再次启动。
- 我已尝试删除执行此包的 SQL 作业并重新创建它,但仍然通过原始通知。
因此,即使在生产服务器上也找不到原始内容的痕迹,我不知道这是从哪里来的。我看不到任何关于内容可以在哪里缓存的信息,但即使它正在被缓存,当我禁用通知步骤时,它仍然会发送通知。
我担心如果这不能修复,那么这是否意味着还有其他软件包没有完全更新?
任何想法或帮助将不胜感激。
这几乎就是脚本组件的设置方式......
Public Class ScriptMain
Inherits UserComponent
Private strDomains As String = String.Empty
Public Overrides Sub PreExecute()
MyBase.PreExecute()
End Sub
Public Overrides Sub PostExecute()
If strDomains.Length > 0 Then
Dim myHtmlMessage As MailMessage
Dim mySmtpClient As SmtpClient
Dim strMessageBody As New StringBuilder
strMessageBody.AppendLine("The listed domains have blah blah blah...")
strMessageBody.Append(strDomains)
strMessageBody.AppendLine(String.Empty)
strMessageBody.AppendLine("Love and Kisses,")
strMessageBody.AppendLine("Your Loving ETL Package")
strMessageBody.AppendLine(Variables.PackageName)
myHtmlMessage = New MailMessage("ETLNotices@company.com", "me@company.com", "Possible Test Domains", strMessageBody.ToString)
mySmtpClient = New SmtpClient("smtp.company.com")
mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials
mySmtpClient.Send(myHtmlMessage)
End If
MyBase.PostExecute()
End Sub
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
Dim str As New StringBuilder
str.AppendLine(strDomains)
str.AppendFormat("{0}", Row.DomainName)
strDomains = str.ToString
End Sub
End Class