次の方法で共有


スクリプト タスクによる HTML メール メッセージの送信

新規 : 2006 年 4 月 14 日

Integration Services の SendMail タスクでは、プレーン テキスト形式のメール メッセージのみがサポートされています。ただし、.NET Framework のスクリプト タスクとメール機能を使用して、HTML メール メッセージを簡単に送信できます。

ms403365.note(ja-jp,SQL.90).gifメモ :
複数のパッケージでより簡単に再利用できるタスクを作成する場合は、このスクリプト タスク サンプルのコードを基にした、カスタム タスクの作成を検討してください。詳細については、「カスタム タスクの開発」を参照してください。

説明

次の例では、System.Net.Mail 名前空間を使用して、HTML メール メッセージを構成および送信します。スクリプトは、電子メールの宛先、差出人、件名、および本文をパッケージ変数から取得し、これらを使用して新しい MailMessage を作成します。また、その IsBodyHtml プロパティに True を設定します。次に、別のパッケージ変数から SMTP サーバー名を取得し、System.Net.Mail.SmtpClient のインスタンスを初期化し、そのインスタンスの Send メソッドを呼び出して HTML メッセージを送信します。このサンプルでは、メッセージ送信機能をサブルーチンにカプセル化しているため、他のスクリプトで再利用できます。

このスクリプト タスクの例を SMTP 接続マネージャを使用せずに構成するには

  1. HtmlEmailToHtmlEmailFrom、および HtmlEmailSubject という名前の文字列変数を作成し、これらに適切な値を割り当てて、有効なテスト メッセージを用意します。

  2. HtmlEmailBody という名前の文字列変数を作成し、HTML マークアップの文字列を割り当てます。次に例を示します。

    <html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>
    
  3. HtmlEmailServer という名前の文字列変数を作成し、匿名発信メッセージを受け入れる、使用可能な SMTP サーバーの名前を割り当てます。

  4. これらの 5 つすべての変数を、新しいスクリプト タスクの ReadOnlyVariables プロパティに割り当てます。

  5. コードに System.Net および System.Net.Mail 名前空間をインポートします。

このトピックのサンプル コードでは、SMTP サーバー名をパッケージ変数から取得します。ただし、SMTP 接続マネージャを利用して接続情報をカプセル化し、コード内で接続マネージャからサーバー名を抽出することもできます。SMTP 接続マネージャの AcquireConnection メソッドは、次の形式の文字列を返します。

SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;

String.Split メソッドを使用して、この引数リストをセミコロン (;) または等号 (=) で個々の文字列の配列に分割し、配列の 2 番目の引数 (subscript 1) をサーバー名として抽出することができます。

このスクリプト タスクの例を SMTP 接続マネージャを使用して構成するには

  1. ReadOnlyVariables の一覧から HtmlEmailServer 変数を削除して、前に構成したスクリプト タスクを変更します。

  2. サーバー名を取得する次のコード行を置き換えます。

        Dim smtpServer As String = _
          Dts.Variables("HtmlEmailServer").Value.ToString
    

    置き換えると、次のようになります。

        Dim smtpConnectionString As String = _
          DirectCast(Dts.Connections("SMTP Connection Manager").AcquireConnection(Dts.Transaction), String)
        Dim smtpServer As String = _
          smtpConnectionString.Split(New Char() {"="c, ";"c})(1)
    

コード

  Public Sub Main()

    Dim htmlMessageTo As String = _
      Dts.Variables("HtmlEmailTo").Value.ToString
    Dim htmlMessageFrom As String = _
      Dts.Variables("HtmlEmailFrom").Value.ToString
    Dim htmlMessageSubject As String = _
      Dts.Variables("HtmlEmailSubject").Value.ToString
    Dim htmlMessageBody As String = _
      Dts.Variables("HtmlEmailBody").Value.ToString
    Dim smtpServer As String = _
      Dts.Variables("HtmlEmailServer").Value.ToString

    SendMailMessage( _
        htmlMessageTo, htmlMessageFrom, _
        htmlMessageSubject, htmlMessageBody, _
        True, smtpServer)

    Dts.TaskResult = Dts.Results.Success

  End Sub

  Private Sub SendMailMessage( _
      ByVal SendTo As String, ByVal From As String, _
      ByVal Subject As String, ByVal Body As String, _
      ByVal IsBodyHtml As Boolean, ByVal Server As String)

    Dim htmlMessage As MailMessage
    Dim mySmtpClient As SmtpClient

    htmlMessage = New MailMessage( _
      SendTo, From, Subject, Body)
    htmlMessage.IsBodyHtml = IsBodyHtml

    mySmtpClient = New SmtpClient(Server)
    mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials
    mySmtpClient.Send(htmlMessage)

  End Sub

参照

その他の技術情報

メール送信タスク

ヘルプおよび情報

SQL Server 2005 の参考資料の入手