Geschrieben von: Christoph Wille
Kategorie: ASP.NET
This printed page brought to you by AlphaSierraPapa
Etwas, das sich heutzutage auf jeder Website findet, ist ein Email-Anfrageformular. Das wird sich wahrscheinlich auch nicht so schnell ändern, deswegen werde ich heute vorstellen, wie man Emails in ASP.NET verschickt: von ganz einfach bis hin zu HTML Mails und Attachments.
Voraussetzung um den Sourcecode dieses Artikels verwenden zu können ist eine Installation des Microsoft .NET Framework SDK's auf einem Webserver. Weiters setze ich voraus, daß der Leser die Programmiersprache C# zu einem gewissen Grad beherrscht - es finden sich etliche Artikel auf diesem Server, um das notwendige Wissen zu erlernen.
Es gibt immer eine Variante, die man in die Rubrik "Quick and Dirty" einreihen kann. Mit dieser möchte ich auch diesmal anfangen, weil man damit die Serverkonfiguration relativ einfach austesten kann, ohne sonstige Seiteneffekte einkalkulieren zu müssen (SimpleMail.aspx).
<% @Page Language="C#" %> <% @Import Namespace="System.Web.Mail" %> <% string strTo = "christophw@sleeper.Dev.AlfaSierraPapa.Com"; string strFrom = "webmaster@aspheute.com"; string strSubject = "Hi Chris"; SmtpMail.Send(strFrom, strTo, strSubject, "A real nice body text here"); Response.Write("Email was queued to disk"); %>
Das Ergebnis - wenn alles funktioniert hat - sieht wie der folgende Screenshot aus:
Was passiert nun eigentlich im Script? Der gesamte Emailsupport befindet sich System.Web.Mail Namespace. In diesem Namespace findet sich die Klasse SmtpMail, deren statische Send Methode vier Parameter annehmen kann:
SmtpMail.Send(From, To, Subject, BodyText);
Wie gesagt sehr simpel, allerdings hat sie eines mit den funktionaleren Emailversandoptionen gemeinsam: der SMTP Server muß der lokal installierte SMTP Service des IIS sein - man kann keinen anderen verwenden. In diesem Aspekt ist der Emailsupport von ASP.NET ident mit den CDONTS von ASP 3.0.
Lassen wir nun diese doch zu einfache Mailmethode hinter uns, und sehen uns ein sehr funktionales Objekt an: die MailMessage Klasse. Diese "kapselt" alles, was man sich von einer Email wünscht - das folgende Beispiel demonstriert die Verwendung anhand einer kurzen HTML Email (SimpleMailMessage.aspx).
<% @Page Language="C#" %> <% @Import Namespace="System.Web.Mail" %> <% MailMessage msgMail = new MailMessage(); msgMail.To = "christophw@sleeper.Dev.AlfaSierraPapa.Com"; msgMail.Cc = "webmaster@sleeper.Dev.AlfaSierraPapa.Com"; msgMail.From = "webmaster@aspheute.com"; msgMail.Subject = "Hi Chris, another mail"; msgMail.BodyFormat = MailFormat.Html; string strBody = "<html><body><b>Hello World</b>" + " <font color=\"red\">ASP.NET</font></body></html>"; msgMail.Body = strBody; SmtpMail.Send(msgMail); Response.Write("Email was queued to disk"); %>
Das sieht vom Code her doch gleich viel besser aus, und vor allem hat man deutlich mehr Optionen als bei der ersten Send Methode. Zuerst setzt man die To, From und Subject Eigenschaften des MailMessage Objekts, und dann setzt man BodyFormat auf den Wert Html aus der MailFormat Enumeration. Und schon kann man eine HTML-formatierte Email verschicken.
Erwähnenswert ist, daß alle Overloads der Send Methode keinen Rückgabewert ob des Erfolgs des Emailversands haben. Der Grund hierfür ist, daß die Emails einfach als Datei in den Pickup Folder des Inetpub Verzeichnisses geschrieben werden, von wo aus der SMTP Service sie liest und verschickt. Fehlerhafte Mails (Versandfehler) finden sich ebenfalls als Dateien, diesmal aber im Bad Folder.
Als Nachtrag möchte ich jetzt noch den Screenshot der Email liefern.
Mit gewissen Mailkomponenten sind Attachments ein wenig abenteuerlich zu verwenden. Mit .NET ist es nur ein weiteres, einfach zu verwendendes Objekt: MailAttachment. Der folgende Code demonstriert, wie man das Attachment an eine MailMessage anhängen kann (MailAttachment.aspx).
<% @Page Language="C#" %> <% @Import Namespace="System.Web.Mail" %> <% MailMessage msgMail = new MailMessage(); msgMail.To = "christophw@sleeper.Dev.AlfaSierraPapa.Com"; msgMail.From = "webmaster@aspheute.com"; msgMail.Subject = "Attachment Test"; msgMail.BodyFormat = MailFormat.Text; msgMail.Body = "Check out the attachment!"; msgMail.Attachments.Add(new MailAttachment("c:\\temp\\annual-report.pdf")); SmtpMail.Send(msgMail); Response.Write("Email was queued to disk"); %>
Die Zeile
msgMail.Attachments.Add(new MailAttachment("c:\\temp\\annual-report.pdf"));
könnte man auch wie folgt programmieren:
MailAttachment maAttach = new MailAttachment("c:\\temp\\annual-report.pdf"); IList msgAttachments = msgMail.Attachments; msgAttachments.Add(maAttach);
Den Punkt, den ich damit illustrieren will ist der, daß die Attachments über ein IList Interface (findet sich im System.Collections Namespace) angegriffen werden - und dieses die Add Methode zur Verfügung stellt. Dieses IList Interface kann man auch zum Aufzählen oder Löschen von Attachments verwenden. Und ein Nachtrag zum Konstruktor von MailAttachment ist auch fällig: man könnte den Encoding Type festlegen (was allerdings selten notwendig werden dürfte).
Einen Screenshot bin ich auf noch schuldig - so sieht das Attachment in Outlook Express aus. Geringer Programmieraufwand, große Wirkung (wenn man etwas sinnvolles versendet).
Das war's für den heutigen Crashkurs in Emailversand in ASP.NET. Ich habe die Objekte vorgestellt, die man verwenden kann, um mit Bordmitteln seinen Kunden - oder sich selbst - über den Webserver eine Nachricht zukommen zu lassen.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000918.zip
ACT MetaMailer - Mails verschicken leicht gemacht
http:/www.aspheute.com/artikel/20021028.htm
Das Versenden von Emails selbst programmieren
http:/www.aspheute.com/artikel/20001009.htm
Einstieg in Visual Studio.NET - die erste Webanwendung mit Visual C#
http:/www.aspheute.com/artikel/20031010.htm
Emails mit ASP.NET und VB.NET versenden
http:/www.aspheute.com/artikel/20010122.htm
Emails versenden mit ASPEmail
http:/www.aspheute.com/artikel/20010219.htm
Html Emails mit Dundas Mailer verschicken
http:/www.aspheute.com/artikel/20010625.htm
Vergleich von DataGrid, DataList und Repeater-Control - was verwende ich wann?
http:/www.aspheute.com/artikel/20040303.htm
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.