次の方法で共有


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

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

注意

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

説明

次の例では、System.Net.Mail 名前空間を使用して、HTML メール メッセージを構成および送信します。 スクリプトは、電子メールの宛先、差出人、件名、および本文をパッケージ変数から取得し、これらを使用して新しい MailMessag を作成します。また、その 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 = 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 を最新の状態に保つ
Microsoft からの最新のダウンロード、記事、サンプル、ビデオ、およびコミュニティから選択したソリューションについては、MSDN の Integration Services ページを参照してください。

MSDN の Integration Services のページを参照する

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

参照

メール送信タスク