Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Emails mit ASP.NET und VB.NET versenden

Geschrieben von: Christian Holm
Kategorie: VB.NET

This printed page brought to you by AlphaSierraPapa

Dieser Artikel wurde bereits im Jahr 2000 unter Verwendung der Programmiersprache C# publiziert (Emails mit ASP.NET versenden). Heute wollen wir Ihnen die Behandlung desselben Themas mit Visual Basic.NET (später VB.NET) vorstellen.

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 VB.NET zu einem gewissen Grad beherrscht.

Die schnellste Variante

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="VB" %>
<% @Import Namespace="System.Web.Mail" %>
<%
Dim strTo, strFrom, strSubject As String

strTo = "csharpnow@hotmail.com"
strFrom = "csharpnow@gmx.at"
strSubject = "Hi there!"

SmtpMail.Send(strFrom, strTo, strSubject,"Message body")

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.

Eine HTML Email verschicken

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="VB" %>
<% @Import Namespace="System.Web.Mail" %>
<%

Dim msgMail As New MailMessage
Dim strBody As String 

msgMail.To = "csharpnow@hotmail.com"
msgMail.Cc = "csharpnow@gmx.at"
msgMail.From = "csharpnow@gmx.at"
msgMail.Subject = "Email w formatted text"

msgMail.BodyFormat = MailFormat.Html
strBody = "<html><body><b>this text should appear formatted</b>" _
    + " <font color=""red"">ASP.NET/VB.NET Demo</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.

Attachments versenden

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="VB" %>
<% @Import Namespace="System.Web.Mail" %>
<%
Dim msgMail As New MailMessage

msgMail.To = "csharpnow@hotmail.com"
msgMail.From = "csharpnow@gmx.at"
msgMail.Subject = "Email w Attachment"

msgMail.BodyFormat = MailFormat.Text
msgMail.Body = "Check out the attachment!"
msgMail.Attachments.Add(New MailAttachment("c:\temp\attachment.txt"))

SmtpMail.Send(msgMail)

Response.Write("Email was queued to disk")
%>

Alternativ zu dem obigen Sourcecode kann man auch das IList Interface zuhilfe nehmen. Der nun folgende Sourcecode hat den gleichen Funktionsumfang, demonstriert aber die Verwendung des IList Interfaces (MailAttachment_2.aspx):

<% @Page Language="VB" debug=true %>
<% @Import Namespace="System.Web.Mail" %>
<%
Dim msgMail As New MailMessage
Dim MyAttach As New MailAttachment("c:\temp\attachment.txt")
Dim msgAttachments As IList

msgMail.To = "csharpnow@hotmail.com"
msgMail.From = "csharpnow@gmx.at"
msgMail.Subject = "Email w Attachment"

msgMail.BodyFormat = MailFormat.Text
msgMail.Body = "Check out the attachment!"

msgAttachments = msgMail.Attachments
msgAttachments.Add(MyAttach)

SmtpMail.Send(msgMail)

Response.Write("Email was queued to disk")
%>

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).

Schlußbemerkung

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

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010122.zip

Verwandte Artikel

Emails mit ASP.NET versenden
http:/www.aspheute.com/artikel/20000918.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

 

©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.