次の方法で共有


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

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

注意

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

説明

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

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

  1. HtmlEmailTo、HtmlEmailFrom、および 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 = ScriptResults.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
public void Main()
        {

            string htmlMessageTo = Dts.Variables["HtmlEmailTo"].Value.ToString();
            string htmlMessageFrom = Dts.Variables["HtmlEmailFrom"].Value.ToString();
            string htmlMessageSubject = Dts.Variables["HtmlEmailSubject"].Value.ToString();
            string htmlMessageBody = Dts.Variables["HtmlEmailBody"].Value.ToString();
            string smtpServer = Dts.Variables["HtmlEmailServer"].Value.ToString();

            SendMailMessage(htmlMessageTo, htmlMessageFrom, htmlMessageSubject, htmlMessageBody, true, smtpServer);

            Dts.TaskResult = (int)ScriptResults.Success;

        }

        private void SendMailMessage(string SendTo, string From, string Subject, string Body, bool IsBodyHtml, string Server)
        {

            MailMessage htmlMessage;
            SmtpClient mySmtpClient;

            htmlMessage = new MailMessage(SendTo, From, Subject, Body);
            htmlMessage.IsBodyHtml = IsBodyHtml;

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

        }
Integration Services のアイコン (小) 最新の Integration Services の入手

マイクロソフトが提供する最新のダウンロード、アーティクル、サンプル、ビデオ、およびコミュニティで選択されたソリューションについては、MSDN または TechNet の Integration Services のページを参照してください。

これらの更新が自動で通知されるようにするには、ページの RSS フィードを定期受信します。

関連項目

概念