스크립트 태스크를 사용하여 HTML 메일 메시지 보내기
적용 대상: Azure Data Factory의 SQL Server SSIS Integration Runtime
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 htmlMessageFrom As String = _
Dts.Variables("HtmlEmailFrom").Value.ToString
Dim htmlMessageTo As String = _
Dts.Variables("HtmlEmailTo").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( _
htmlMessageFrom, htmlMessageTo, _
htmlMessageSubject, htmlMessageBody, _
True, smtpServer)
Dts.TaskResult = ScriptResults.Success
End Sub
Private Sub SendMailMessage( _
ByVal From As String, ByVal SendTo 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( _
From, SendTo, Subject, Body)
htmlMessage.IsBodyHtml = IsBodyHtml
mySmtpClient = New SmtpClient(Server)
mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials
mySmtpClient.Send(htmlMessage)
End Sub
public void Main()
{
string htmlMessageFrom = Dts.Variables["HtmlEmailFrom"].Value.ToString();
string htmlMessageTo = Dts.Variables["HtmlEmailTo"].Value.ToString();
string htmlMessageSubject = Dts.Variables["HtmlEmailSubject"].Value.ToString();
string htmlMessageBody = Dts.Variables["HtmlEmailBody"].Value.ToString();
string smtpServer = Dts.Variables["HtmlEmailServer"].Value.ToString();
SendMailMessage(htmlMessageFrom, htmlMessageTo, htmlMessageSubject, htmlMessageBody, true, smtpServer);
Dts.TaskResult = (int)ScriptResults.Success;
}
private void SendMailMessage(string From, string SendTo, string Subject, string Body, bool IsBodyHtml, string Server)
{
MailMessage htmlMessage;
SmtpClient mySmtpClient;
htmlMessage = new MailMessage(From, SendTo, Subject, Body);
htmlMessage.IsBodyHtml = IsBodyHtml;
mySmtpClient = new SmtpClient(Server);
mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials;
mySmtpClient.Send(htmlMessage);
}