Oft sieht man in Websites interessanten Text den man evtl einen Kollegen zur Verfügung stellen möchte. Das Ziel ist es also eine HTML Mail zu erzeugen mit einem definierten Ausschnitt aus der Website. Für unser Beispiel stellen wir Daten per Gridview dar und versehen diese noch mit einer Überschrift. Um nur einen Ausschnitt der Website zu versenden wird der relevante Teil innerhalb eines Panel Control platziert.
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="per mail senden" />
<asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px">
Wichtige Daten: <br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CustomerID" EnableViewState="false"
DataSourceID="SqlDataSource1" EmptyDataText="Es sind keine Datens?tze zum Anzeigen vorhanden.">
<Columns>.... |
Zunächst betrachtet der Benutzer die Website und beim Click auf den Button wird eine Email versendet. Diese muss das Format HTML haben. Hier auf DevTrain gibt es einige Artikel die sich mit den Details der in ASP.NET 2.0 neuen Klasse SMTPClient beschäftigt.
Ich fokusiere mich auf die Methode RenderControl die es erlaubt den HTML Code eines Controls, hier des Panels und Childelemente, zu erzeugen.
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim SB As New StringBuilder()
Dim SW As New System.IO.StringWriter(SB)
Dim html As New HtmlTextWriter(SW)
Panel1.RenderControl(html)
Dim msg As New System.Net.Mail.MailMessage("from@xxx.de", "to@xxx.de")
msg.IsBodyHtml = True
msg.Body = SB.ToString()
msg.Subject = "Mail von Website"
Dim mymail As New System.Net.Mail.SmtpClient()
mymail.Send(msg)
End Sub |
Falls dann ein Fehler auftaucht
Das Steuerelement GridView1 vom Typ GridView muss in einem Formulartag mit runat=server positioniert werden.
muss folgender Code in die Seite eingefügt werden
Public Overrides Sub VerifyRenderingInServerForm(ByVal Ctrl As Control)
End Sub |
Das ist sozusagen ein Bugfixing.