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 사용하여 이 인수 목록을 각 세미콜론(;) 또는 등호(=)의 개별 문자열 배열로 구분한 다음, 배열에서 두 번째 인수(아래 첨자 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 = 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를 사용하여 최신 상태 유지
Microsoft의 최신 다운로드, 문서, 샘플 및 비디오와 커뮤니티에서 선택한 솔루션은 MSDN의 Integration Services 페이지를 방문하세요.
MSDN의 Integration Services 페이지 방문
이러한 업데이트에 대한 자동 알림을 보려면 페이지에서 사용할 수 있는 RSS 피드를 구독합니다.