0

我有一个 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
4

1 回答 1

0

克里斯,

我有一些问题:

我猜您在脚本任务中使用循环机制来遍历所有域;在其中找到测试对象;将它们附加到一个字符串,最后发送一封电子邮件。这个对吗?

您是在脚本中发送邮件还是创建了单独的发送邮件任务?

您的邮件正文是否来自配置文件中的某个变量?

于 2012-09-19T04:29:53.380 回答