Das versenden von e-Mails ist eigentlich eine einfache Sache. Probleme gabs bisher immer erst bei Sonderfällen. Viele Mailserver verlangen z.B. in jüngster Zeit eine Authentifizierung. Da Mails nicht nur aus Web Anwendungen versandt werden können hat die Mail Klasse in .NET Framework jetzt nicht nur viele neue Funktionen sondern gleich auch noch eine neue Heimat im Namesraum System.Net.Mail.
Das einfache Mail versenden funktioniert ähnlich wie bei .NET 1.x. Allerdings benötigt man jetzt unbedingt eine Instanz der SMTPClient Klasse. Mit der Methode Send wird in den Parametern die Adresse des Senders, die Email des Empfängers, der Betreff und der Text übermittelt.
Dim myClient As New Net.Mail.SmtpClient() myClient.Send("info@ppedv.de", email.Text + ", info@ppedv.de", "Bestellung des Buches erhalten", mailtext) |
Allerdings wird dieser Versuch wahrscheinlich mit folgender Fehlermeldung scheitern:
The SMTP host was not specified.
Die Lösung liegt entweder im Code oder in der Web.Config. Da Konfiguration immer besser als Code ist zunächst der Eintrag in die Web.Config. Dabei kann auch gleich Benutzername und Passwort für die Anmeldung am SMTP Server mitgeliefert werden.
<system.net> <mailSettings> <smtp deliveryMethod="Network"> <network defaultCredentials="False" host="localhost" password="pass" port="25" userName="user" /> </smtp> </mailSettings> </system.net> </configuration> |
Die zweite Methode bedient sich der Host Eigenschaft. Diese kann auch auf den SMTP Server zeigen. In diesem Beispiel wurde als Versand Methode FileAccess statt SMTP Protokoll gewählt. Damit blockiert ein gestoppter SMTP Server nicht die Anwendung weil einfach ins Pickup Directory des SMTP Server geschrieben wird.
Dim myClient As New Net.Mail.SmtpClient() myClient.Host = "localhost" myClient.DeliveryMethod = Net.Mail.SmtpDeliveryMethod.PickupDirectoryFromIis myClient.Send("info@ppedv.de", email.Text + ", info@ppedv.de", "Bestellung des Buches erhalten", mailtext) |
Diese Methode ist auch noch ein vielfaches schneller und für Tests sehr gut geeignet.
Wenn die Mail HTML Code, spezielle Encodings oder Attachments beinhalten soll, wird am besten ein Mail Message Objekt erzeugt das die entsprechenden Eigenschaften bereit stellt.
Dim mymsg As New System.Net.Mail.MailMessage("ppedv Events <events@ppedv.de>", email) mymsg.Subject = betreff mymsg.BodyEncoding = System.Text.Encoding.Unicode mymsg.Body = nachricht.ToString Dim mymail As New System.Net.Mail.SmtpClient mymail.Send(mymsg) |