スクリプト タスクによる HTML メール メッセージの送信
新規 : 2006 年 4 月 14 日
Integration Services の SendMail タスクでは、プレーン テキスト形式のメール メッセージのみがサポートされています。ただし、.NET Framework のスクリプト タスクとメール機能を使用して、HTML メール メッセージを簡単に送信できます。
メモ : |
---|
複数のパッケージでより簡単に再利用できるタスクを作成する場合は、このスクリプト タスク サンプルのコードを基にした、カスタム タスクの作成を検討してください。詳細については、「カスタム タスクの開発」を参照してください。 |
説明
次の例では、System.Net.Mail 名前空間を使用して、HTML メール メッセージを構成および送信します。スクリプトは、電子メールの宛先、差出人、件名、および本文をパッケージ変数から取得し、これらを使用して新しい MailMessage を作成します。また、その IsBodyHtml プロパティに True を設定します。次に、別のパッケージ変数から SMTP サーバー名を取得し、System.Net.Mail.SmtpClient のインスタンスを初期化し、そのインスタンスの Send メソッドを呼び出して HTML メッセージを送信します。このサンプルでは、メッセージ送信機能をサブルーチンにカプセル化しているため、他のスクリプトで再利用できます。
このスクリプト タスクの例を SMTP 接続マネージャを使用せずに構成するには
HtmlEmailTo
、HtmlEmailFrom
、およびHtmlEmailSubject
という名前の文字列変数を作成し、これらに適切な値を割り当てて、有効なテスト メッセージを用意します。HtmlEmailBody
という名前の文字列変数を作成し、HTML マークアップの文字列を割り当てます。次に例を示します。<html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>
HtmlEmailServer という名前の文字列変数を作成し、匿名発信メッセージを受け入れる、使用可能な SMTP サーバーの名前を割り当てます。
これらの 5 つすべての変数を、新しいスクリプト タスクの ReadOnlyVariables プロパティに割り当てます。
コードに System.Net および System.Net.Mail 名前空間をインポートします。
このトピックのサンプル コードでは、SMTP サーバー名をパッケージ変数から取得します。ただし、SMTP 接続マネージャを利用して接続情報をカプセル化し、コード内で接続マネージャからサーバー名を抽出することもできます。SMTP 接続マネージャの AcquireConnection メソッドは、次の形式の文字列を返します。
SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;
String.Split メソッドを使用して、この引数リストをセミコロン (;) または等号 (=) で個々の文字列の配列に分割し、配列の 2 番目の引数 (subscript 1) をサーバー名として抽出することができます。
このスクリプト タスクの例を SMTP 接続マネージャを使用して構成するには
ReadOnlyVariables の一覧から
HtmlEmailServer
変数を削除して、前に構成したスクリプト タスクを変更します。サーバー名を取得する次のコード行を置き換えます。
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