Aracılığıyla paylaş


Betik Göreviyle HTML Posta İletisi Gönderme

Şunlar için geçerlidir: Azure Data Factory'de SQL Server SSIS Integration Runtime

Integration Services SendMail görevi yalnızca düz metin biçiminde posta iletilerini destekler. Ancak Betik görevini ve .NET Framework'ün posta özelliklerini kullanarak HTML posta iletilerini kolayca gönderebilirsiniz.

Not

Birden çok pakette daha kolay yeniden kullanabileceğiniz bir görev oluşturmak istiyorsanız, özel bir görevin başlangıç noktası olarak bu Betik görev örneğindeki kodu kullanmayı göz önünde bulundurun. Daha fazla bilgi için bkz. Özel Görev geliştirme.

Açıklama

Aşağıdaki örnekte, html posta iletisini yapılandırmak ve göndermek için System.Net.Mail ad alanı gerçekleştirilir. Betik, paket değişkenlerinden e-postanın To, From, Subject ve gövdesini alır, bunları kullanarak yeni bir MailMessageoluşturur ve IsBodyHtml özelliğini trueolarak ayarlar. Ardından smtp sunucusu adını başka bir paket değişkeninden alır, System.Net.Mail.SmtpClientörneğini başlatır ve HTML iletisini göndermek için Send yöntemini çağırır. Örnek, diğer betiklerde yeniden kullanılabilecek bir alt yordamda ileti gönderme işlevini kapsüller.

Bu Betik Görevi örneğini SMTP Bağlantı Yöneticisi olmadan yapılandırmak için

  1. HtmlEmailTo, HtmlEmailFromve HtmlEmailSubject adlı dize değişkenleri oluşturun ve geçerli bir test iletisi için bunlara uygun değerleri atayın.

  2. HtmlEmailBody adlı bir dize değişkeni oluşturun ve buna bir HTML işaretleme dizesi atayın. Mesela:

    <html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>  
    
  3. HtmlEmailServer adlı bir dize değişkeni oluşturun ve anonim giden iletileri kabul eden kullanılabilir bir SMTP sunucusunun adını atayın.

  4. Bu değişkenlerin beşini de yeni betik görevinin ReadOnlyVariables özelliğine atayın.

  5. System.Net ve System.Net.Mail ad alanlarını kodunuz içine aktarın.

Bu konudaki örnek kod, SMTP sunucusu adını bir paket değişkeninden alır. Ancak, bağlantı bilgilerini kapsüllemek ve bağlantı yöneticisinden sunucu adını kodunuzda ayıklamak için smtp bağlantı yöneticisinden de yararlanabilirsiniz. SMTP bağlantı yöneticisinin AcquireConnection yöntemi aşağıdaki biçimde bir dize döndürür:

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

Bu bağımsız değişken listesini her noktalı virgüldeki (;) veya eşittir işareti (=) tek tek dize dizisine ayırmak için String.Split yöntemini kullanabilir ve ardından diziden ikinci bağımsız değişkeni (alt simge 1) sunucu adı olarak ayıklayabilirsiniz.

Bu Betik Görevi örneğini SMTP Bağlantı Yöneticisi ile yapılandırmak için

  1. HtmlEmailServer değişkenini ReadOnlyVariableslistesinden kaldırarak daha önce yapılandırılan Betik görevini değiştirin.

  2. Sunucu adını alan kod satırını değiştirin:

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

    aşağıdaki satırlarla:

    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)  
    

Kod

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

Ayrıca Bkz.

posta görevi gönderme