다음을 통해 공유


스크립트 태스크를 사용하여 HTML 메일 메시지 보내기

Integration Services SendMail 작업은 일반 텍스트 형식의 메일 메시지만 지원합니다. 그러나 스크립트 작업 및 .NET Framework의 메일 기능을 사용하여 HTML 메일 메시지를 쉽게 보낼 수 있습니다.

참고 항목

여러 패키지에서 더 쉽게 다시 사용할 수 있는 작업을 만들려면 이 스크립트 태스크 샘플의 코드를 사용자 지정 작업의 시작점으로 사용하는 것이 좋습니다. 자세한 내용은 사용자 지정 작업 개발을 참조하세요.

설명

다음 예에서는 System.Net.Mail 네임스페이스를 사용하여 HTML 메일 메시지를 구성하고 보냅니다. 스크립트는 패키지 변수에서 전자 메일의 받는 사람, 보낸 사람, 제목 및 본문을 가져오고, 이를 사용하여 새 MailMessage를 만들고, 해당 IsBodyHtml 속성을 True로 설정합니다. 그런 다음 다른 패키지 변수에서 SMTP 서버 이름을 가져오고, 인스턴스를 System.Net.Mail.SmtpClient초기화하고, 해당 메서드를 Send 호출하여 HTML 메시지를 보냅니다. 이 샘플은 다른 스크립트에서 다시 사용할 수 있는 서브루틴의 메시지 전송 기능을 캡슐화합니다.

이 스크립트 태스크 예에서 SMTP 연결 관리자를 사용하지 않도록 구성하려면

  1. HtmlEmailTo, HtmlEmailFromHtmlEmailSubject라는 문자열 변수를 만들고 이 변수에 올바른 테스트 메시지에 대한 적절한 값을 할당합니다.

  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 사용하여 이 인수 목록을 각 세미콜론(;) 또는 등호(=)의 개별 문자열 배열로 구분한 다음, 배열에서 두 번째 인수(아래 첨자 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 피드를 구독합니다.

참고 항목

메일 보내기 태스크