
Mellékelt példa megnyitása előtt szükséges egy HTMLEmail nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt mappa Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával. További szükséges előkészület, hogy a WebForm1.cs forráskód 27. sorában lévő connStr változónak olyan értéket adjunk, mely biztosítja a Northwind példaadatbázis elérését. A server változóban az e-mail küldéshez szükséges SMTP szerver nevét vagy IP címét kell megadnunk, míg a from változóba a küldő e-mail címét, és végül a to változóba a címzett e-mail címét kell megadnunk.
Első lépésként létrehozunk egy kapcsolatot az adatbázissal, majd futtatunk egy egyszerű lekérdezést.
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
SqlConnection connection = new SqlConnection(connStr);
connection.Open();
SqlDataAdapter da = new SqlDataAdapter("select top 10 * from Products", connection);
DataSet ds = new DataSet();
da.Fill(ds);
A lekérdezés eredményét megjelenítjük a web oldalon lévő DataGrid kontrolban, majd zárjuk az adatbázis kapcsolatot.
DataGrid1.DataSource=ds.Tables[0].DefaultView;
DataGrid1.DataBind();
connection.Close();
Az e-mail küldéshez szükségünk lesz arra, hogy az imént megjelenített DataGrid teljes HTML kódját elérhessük sztringként. Levelünk szövegében ezt a HTML kódot kell megadnunk ahhoz, hogy az e-mail tartalma egyezzen a web oldalon megjelenő tartalommal.
Ezt a HTML kódot legeneráltathatjuk a DataGrid kontrollal. Ehhez szükségünk lesz egy StringBuilder osztályra, melyet a StringWriter osztály létrehozásánál kell felhasználnunk.
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
A HTML kód előállításához még egy HtmlTextWriter osztályra is szükségünk lesz, ennek létrehozásakor a StringWriter osztály példányát kell megadnunk.
HtmlTextWriter htw = new HtmlTextWriter(sw);
Ezt követően már meghívhatjuk a DataGrid RenderControl függvényét, mely elvégzi az adott kontrol legenerálását HTML kóddá. Paraméterként az imént létrehozott HtmlTextWriter osztály példányát kell megadnunk.
DataGrid1.RenderControl(htw);
Az eredményt a StringBuilder osztályon keresztül olvashatjuk ki. Ezt a HTML kódot a példa kedvéért a TextBox1 kontrolban megjelenítjük.
TextBox1.Text = sb.ToString();
}
}
Ezzel a módszerrel természetesen nemcsak a DataGrid HTML kódjához juthatunk hozzá, hanem bármely más webes kontrolt rábírhatunk e feladat elvégzésére a RenderControl függvény meghívásával.
Az e-mail küldés most már egyszerű, csupán annyi a teendőnk, hogy egy MailMessage osztály property-jeit megfelelő módon feltöltünk, majd az SmtpMail osztály segítségével elküldjük az e-mail-t. Fontos, hogy az e-mail-t HTML típusra válasszuk. Ezt a BodyFormat property-ben tehetjük meg. Ettől kezdve a Body property-ben megadott szring, amennyiben HTML kódokat tartalmaz, úgy az e-mailben ez értelmezésre kerül és eredményként a web oldalon is látható tartalom jelenik meg benne.
private void Button1_Click(object sender, System.EventArgs e)
{
MailMessage mm = new MailMessage();
mm.BodyFormat = MailFormat.Html;
mm.From = from;
mm.To = to;
mm.Subject = "teszt";
mm.Body = TextBox1.Text;
SmtpMail.SmtpServer=server;
SmtpMail.Send(mm);
}