Wysyłanie wiadomości HTML mail z zadaniem skryptów
The Integration Services SendMail task only supports mail messages in plain text format.Można jednak łatwo wysłać wiadomości e-mail w formacie HTML za pomocą zadań skryptów i możliwości poczty systemu .NET Framework.
Uwaga
Jeśli chcesz utworzyć zadanie, które łatwo można używać w wielu pakietów, należy rozważyć przy użyciu kodu w tym przykładzie skrypt zadanie jako punkt początkowy dla niestandardowego zadania.Aby uzyskać więcej informacji zobaczOpracowywania niestandardowego zadania.
Description
W poniższym przykładzie użyto System.Net.Mail obszar nazw, aby skonfigurować i wysłać wiadomość e-mail w formacie HTML.Skrypt uzyskuje do, od, temat i treść wiadomości e-mail z pakiet zmiennych, służą one do tworzenia nowego MailMessage i ustawia jego IsBodyHtml Właściwość True. Następnie uzyskuje nazwa serwera SMTP z innej zmiennej pakiet, inicjuje wystąpienie System.Net.Mail.SmtpClient, a wywołuje jego Send Metoda wysyłania wiadomości w formacie HTML. Próbka hermetyzuje wiadomości, wysyłanie funkcjonalność w procedura, która może być wielokrotnie używane w innych skryptów.
Aby skonfigurować w tym przykładzie skrypt zadań bez SMTP menedżer połączeń
Tworzenie zmiennych typu ciąg o nazwie HtmlEmailTo, HtmlEmailFrom, a HtmlEmailSubject i przypisz odpowiednie wartości dla nich dla wiadomości testowej prawidłowy.
Tworzenie zmiennej ciągu o nazwie HtmlEmailBody i przypisać jej ciąg znaczniki HTML. Na przykład:
<html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>
Tworzenie zmiennej ciąg o nazwie HtmlEmailServer i przypisać nazwę dostępnego serwera SMTP akceptującym anonimowe wiadomości wychodzących.
Wszystkie pięć tych zmiennych, aby przypisać ReadOnlyVariables właściwość nowe zadanie skryptu.
Importowanie System.Net i System.Net.Mail obszary nazw do kodu.
Przykładowy kod w tym temacie uzyskuje nazwa serwera SMTP ze zmiennej pakiet.Jednak użytkownik może również wykorzystać aby umieszczać informacje o połączeniu Menedżer połączeń SMTP i wyodrębnić nazwa serwera z Menedżera połączeń w kodzie.The AcquireConnection(Object) metoda of the SMTP menedżer połączeń returns a ciąg in the following format:
SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;
Można użyć String.Split metoda, aby podzielić tej listy argumentów na tablicę ciągów pojedynczy w każdym średnik (;) lub równa się znak (=), a następnie wyodrębnić drugiego argumentu (indeks dolny 1) z tablicy jako nazwa serwera.
Aby skonfigurować w tym przykładzie skrypt zadań z zarządcę połączeń SMTP
Modyfikowanie zadania skryptu, wcześniej skonfigurowane przez usunięcie HtmlEmailServer zmienną z listy ReadOnlyVariables.
Zastąp wiersza kodu, który uzyskuje nazwa serwera:
Dim smtpServer As String = _ Dts.Variables("HtmlEmailServer").Value.ToString
następujące wiersze:
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);
}
|