0

VB.NETコードを使用したスクリプトタスクを使用して、SSISパッケージから電子メールを送信することができました。私はスクリプティングが苦手です。基本的に、オンラインでさまざまなスクリプトを調べて、自分のいる場所にたどり着きました。私が抱えている問題は、BIDSのSSISパッケージですべての変数を設定し、パッケージでそれらをReadOnlyに設定していることです。

Attachmentパッケージ変数に値を指定するとすべて正常に機能しますが、指定しないとスクリプトが失敗します。スクリプトを使用してメールを送信するときに、添付ファイルを常に送信したいとは限りません。BIDSのSSISパッケージのAttachement変数に値が指定されていない場合、スクリプトタスクが本文のメッセージのみを送信し、失敗しないようにコードを変更したいと思います。

また、可能であれば、添付ファイルを送信すると、複数の添付ファイルを送信できるようになります。また、SSISですべてが機能する必要がなくなったように見えるため、スクリプトを設定したので、SendMail TaskSSISで設定されたスクリプトと変数だけですべてが機能することにも気づきました。

に接続して、それらを一緒に機能させることはできませんScript TaskSend Mail Task

これが私のスクリプトタスクコードです:

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.Net.Mail
Imports System.Net

<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase

Enum ScriptResults
    Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
    Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
End Enum

Public Sub Main()

    MsgBox(Dts.Variables("Username").Value.ToString)

    Dim myHtmlMessage As MailMessage
    Dim mySmtpClient As SmtpClient

    Dim mailAuthentication As System.Net.NetworkCredential
    mailAuthentication = New System.Net.NetworkCredential( _
        Dts.Variables("Username").Value.ToString(), _
        Dts.Variables("Password").Value.ToString())

    myHtmlMessage = New MailMessage( _
         Dts.Variables("From").Value.ToString(), _
         Dts.Variables("To").Value.ToString(), _
         Dts.Variables("Subject").Value.ToString(), _
         Dts.Variables("Body").Value.ToString())

    myHtmlMessage.Attachments.Add(New Attachment(Dts.Variables("Attachments").Value.ToString))
    mySmtpClient = New SmtpClient(Dts.Variables("SMTPServer").Value.ToString(), Dts.Variables("Port").Value.ToString())
    mySmtpClient.UseDefaultCredentials = False

    mySmtpClient.Credentials = mailAuthentication
    mySmtpClient.EnableSsl = True
    mySmtpClient.Send(myHtmlMessage)
    Dts.TaskResult = ScriptResults.Success

End Sub

End Class
4

2 に答える 2

1

メールの添付ファイルに値を追加する前に変数をチェックするロジック

  • Attachments関数 を使用して変数の値が空でないかどうかを確認するには、スクリプトの次の行を変更しますString.IsNullOrEmpty

  • 内でパッケージ変数を使用する場合、User::またはのように、変数のスコープに接頭辞を付けることは常に良い習慣です。System::Script Task

  • もう 1 つ条件を追加するSystem.IO.File.Existsには、メールの添付ファイルにファイルを追加する前に、関数を使用して指定したパスにファイルが実際に存在するかどうかを確認できます。

から:

myHtmlMessage.Attachments.Add(New Attachment(Dts.Variables("Attachments").Value.ToString))

に:

Dim attachment As String = Dts.Variables("User::Attachments").Value.ToString()

If Not String.IsNullOrEmpty(attachment) Then
    If System.IO.File.Exists(attachment) Then
        myHtmlMessage.Attachments.Add(New Attachment(attachment))
    End If
End If
于 2013-02-12T18:50:19.993 に答える
1

「スクリプト タスクをメール送信タスクに接続して、それらを連携させることはできませんか?」

(3 番目のタブ)Send Email Taskを使用して、動的にすることができます。式を使用すると、値に基づいて SSIS パッケージ内のあらゆるものを異なる動作にすることができます。ご覧のとおり、変更が必要なほとんどのプロパティがドロップダウン リストに表示されます。

ここに画像の説明を入力

于 2013-02-12T20:31:07.637 に答える