스크립트 태스크를 사용하여 HTML 메일 메시지 보내기Sending an HTML Mail Message with the Script Task

Integration ServicesIntegration Services SendMail 태스크에서는 일반 텍스트 형식의 메일 메시지만 지원합니다.The Integration ServicesIntegration Services SendMail task only supports mail messages in plain text format. 그러나 스크립트 태스크와 .NET Framework의 메일 기능을 사용하여 HTML 메일 메시지를 쉽게 보낼 수도 있습니다.However you can easily send HTML mail messages by using the Script task and the mail capabilities of the .NET Framework.

참고

여러 패키지에서 쉽게 다시 사용할 수 있는 태스크를 만들려면 이 스크립트 태스크 예제에 있는 코드를 바탕으로 사용자 지정 태스크를 만들어 보십시오.If you want to create a task that you can more easily reuse across multiple packages, consider using the code in this Script task sample as the starting point for a custom task. 자세한 내용은 사용자 지정 태스크 개발을 참조하세요.For more information, see Developing a Custom Task.

DescriptionDescription

다음 예제에서는 System.Net.Mail 네임 스페이스를 구성 하 고 HTML 메일 메시지를 보냅니다.The following example uses the System.Net.Mail namespace to configure and send an HTML mail message. 스크립트에서 제목과 패키지 변수에서 전자 메일의 본문을 가져오고, 사용 하 여 새 MailMessag설정 해당 IsBodyHtml 속성을 True합니다.The script obtains the To, From, Subject, and body of the e-mail from package variables, uses them to create a new MailMessage, and sets its IsBodyHtml property to True. 인스턴스를 초기화 합니다. 다른 패키지 변수에서 SMTP 서버 이름을 가져온 다음 대신, 호출 하 고 해당 보낼 HTML 메시지를 보내는 방법을 합니다.Then it obtains the SMTP server name from another package variable, initializes an instance of System.Net.Mail.SmtpClient, and calls its Send method to send the HTML message. 이 예제에서는 다른 스크립트에서 다시 사용할 수 있도록 메시지 보내기 기능을 서브루틴에 캡슐화합니다.The sample encapsulates the message sending functionality in a subroutine that could be reused in other scripts.

이 스크립트 태스크 예에서 SMTP 연결 관리자를 사용하지 않도록 구성하려면To configure this Script Task example without an SMTP Connection Manager

  1. HtmlEmailTo, HtmlEmailFromHtmlEmailSubject라는 문자열 변수를 만들고 이 변수에 올바른 테스트 메시지에 대한 적절한 값을 할당합니다.Create string variables named HtmlEmailTo, HtmlEmailFrom, and HtmlEmailSubject and assign appropriate values to them for a valid test message.

  2. HtmlEmailBody라는 문자열 변수를 만들고 이 변수에 HTML 태그의 문자열을 할당합니다.Create a string variable named HtmlEmailBody and assign a string of HTML markup to it. 예를 들어For example:

    <html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>  
    
  3. HtmlEmailServer라는 문자열 변수를 만들고 보내는 익명의 보내는 메시지를 허용하는 사용 가능한 SMTP 서버의 이름을 할당합니다.Create a string variable named HtmlEmailServer and assign the name of an available SMTP server that accepts anonymous outgoing messages.

  4. 5 이러한 변수를 모두 할당 된 ReadOnlyVariables 새 스크립트 태스크의 속성입니다.Assign all five of these variables to the ReadOnlyVariables property of a new Script task.

  5. 가져오기는 System.NetSystem.Net.Mail 코드에 대 한 네임 스페이스입니다.Import the System.Net and System.Net.Mail namespaces into your code.

    이 항목의 예제 코드는 패키지 변수에서 SMTP 서버 이름을 가져옵니다.The sample code in this topic obtains the SMTP server name from a package variable. 그러나 SMTP 연결 관리자를 사용하여 연결 정보를 캡슐화하고 코드를 통해 연결 관리자에서 서버 이름을 추출할 수도 있습니다.However, you could also take advantage of an SMTP connection manager to encapsulate the connection information, and extract the server name from the connection manager in your code. SMTP 연결 관리자의 AcquireConnection 메서드는 문자열을 다음과 같은 형식으로 반환합니다.The AcquireConnection method of the SMTP connection manager returns a string in the following format:

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

    사용할 수는 String.Split 메서드를이 인수 목록을 각 세미콜론 (;)에서 개별 문자열의 배열에 구분 또는 값이 등호 (=) 및 서버 이름으로 배열에서 두 번째 인수 (subscript 1)을 추출 합니다.You can use the String.Split method to separate this argument list into an array of individual strings at each semicolon (;) or equal sign (=), and then extract the second argument (subscript 1) from the array as the server name.

이 스크립트 태스크 예에서 SMTP 연결 관리자를 사용하도록 구성하려면To configure this Script Task example with an SMTP Connection Manager

  1. 제거 하 여 이전에 구성한 스크립트 태스크를 수정 된 HtmlEmailServer 목록에서 변수 ReadOnlyVariables합니다.Modify the Script task configured earlier by removing the HtmlEmailServer variable from the list of ReadOnlyVariables.

  2. 서버 이름을 가져오는 다음 코드 줄을Replace the line of code that obtains the server name:

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

    다음 줄로 바꿉니다.with the following lines:

    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)  
    

코드Code

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);  

        }  

관련 항목:See Also

메일 보내기 태스크Send Mail Task