[VB.net] E-Mail Versand via Smtp

05/06/2010 18:40 Engel#1
Da ich in letzter Zeit hier einige Tutorials zum Thema gefunden habe möchte ich euch meins auch nicht vorenthalten. Ich hoffe es ist leicht verstädnlich und ihr lasst mir was feedback hier.

In diesem kleinen Tutorial möchte ich euch zeigen wie ihr schnell und einfach in Vb.net
den Inhalt einer Textbox als E-Mails mit Anhang via Smtp verschicken könnt.
Ich habe zum Erstellen Visual Basic 2008 Express benutzt.
Ich werde euch jetzt Schritt für Schritt meinen Beispielcode erklären.

[Only registered and activated users can see links. Click Here To Register...]

Erstellt zu allererst eine neue Windows-Forms Anwendung
( Datei > Neues Projekt > Windows-Forms Anwendung)
Dieser Form fügt ihr 2 Textboxen , 1 Checkbox und 1 Command Button hinzu.
(Ihr könnt euch an meinem Bild orientieren. )

Weiter gehts mit dem Code
Mit einem Doppelklick auf den Command Button öffnet ihr die Code Ansicht.

[Only registered and activated users can see links. Click Here To Register...]

Auf gehts !

Damit unser Code funktionieren kann wie er soll , müsst ihr außerhalb der Public Class (Wichtig!)
Die Zeile
Quote:
Imports System.Net.Mail
hinzufügen.

Weiter gehts mit unserem Button. Da unser Programm auf Knopfdruck eine E-Mail versenden soll ,
muss der folgende Code in der Routine des Buttons stehen.
(Ihr könnt natürlich auch eine eigene Routine erstellen und sie nach Bedarf aufrufen. )

Als erstes wird in unserem Beispielcode die Variable Msg als MailMessage definiert
und die Variable myCredentials als System.Net.NetworkCredential .
(Wie jedem klar sein sollte könnt ihr die Variablen frei bestimmen.)

Um eine E-Mail verschicken zu können brauchen wir einen Postausgansserver.
Der nächste Teil unseres Codes beschäftigt sich mit diesem Smtpserver.

Die Variable mySmtpsvr wird als unser Ausgansserver definiert.
In der Zeile
Quote:
mySmtpsvr.Host = " smtp.provider.de"
legen wir die Adresse unseres Ausgangsservers fest.
In
Quote:
mySmtpsvr.Port = 25
bestimmen wir noch den dazugehörigen Port.

Falls ihr die Adresse oder den Port nicht wisst hilft euch ein Blick auf [Only registered and activated users can see links. Click Here To Register...]


Um E-Mails verschicken zu können müsst ihr euch aber auch an eurem Ausgangsserver anmelden.
Die nächsten Zeilen des Programms beschäftigen sich damit.
Quote:
myCredentials.UserName = "Beispiel_Username"
myCredentials.Password = "Beispiel_Passwort"
mySmtpsvr.UseDefaultCredentials = False
mySmtpsvr.Credentials = myCredentials
Diseser Teil sollte soweit eigentlich klar sein. Ihr speichert unter myCredentials.UserName euren Benutzernamen
und unter myCredentials.Password euer Passwort ab.
Da wir uns in unserem mit unseren Anmeldedaten anmelden muss mySmtpsvr.UseDefaultCredentials
= False sein. ( Wir benutzen keine Default Credentials - sondern unsere ! )
Zu guterletzt bestimmen wir mit
Quote:
mySmtpsvr.Credentials = myCredentials
das wir uns mit unseren Credentials an dem Server anmelden möchten. [Only registered and activated users can see links. Click Here To Register...]

Weiter gehts mit unserer E-Mail.
Ich habe die Routine in den Try Block gesetzt um Fehler (Zb. beim anhängern einer Datei)mit einer MsgBox abzufangen.
Falls ihr euch bis jetzt noch nicht mit der IOException Klasse auseinander gesetzt habt und Fehler
entstehen sollten könnte euch ein Blick auf [Only registered and activated users can see links. Click Here To Register...] weiterhelfen.


Als allererstes bestimmen wir mit
Quote:
Msg.IsBodyHtml = False
das der Inhalt unserer E-Mail kein Html Code ist.
Solltet ihr versuchen die E-Mail in Html zu gestalten muss der Wert natürlich auf True geändert werden.
In
Quote:
Msg.From = New MailAddress("[Only registered and activated users can see links. Click Here To Register...]")
wird die Absendeadresse bestimmt.
(Die E-Mail Adresse von der ihr eure E-Mails verschickt.)
Weiter gehts mit
Quote:
Msg.To.Add(TextBox1.Text)
. Hier bestimmt ihr den Empfänger eurer Email
In meinem Beispiel wird der Empfänger per Eingabe aus der Textbox1.text ermittelt.
Solltet ihr eine statische E-Mail Adresse verwenden wollen müsst ihr diese E-Mail Adresse in " " in der Klammer eintragen.
Zb. : Msg.To.Add("Empfä[Only registered and activated users can see links. Click Here To Register...]")
Mit
Quote:
Msg.Subject = "Vb.net E-Mail Versand via Smtp"
bestimmen wir unseren E-Mail Betreff.
Jetzt gehts zum Text.
Quote:
Msg.Body = "Vordefinierter Text" + TextBox2.Text
In dem Beispiel wird ein vordefinierter Text des Programmierers + die Benutzereingabe(Textbox2.text) versendet.


Zum Schluss wollen wir noch das wenn die Checkbox markiert wird ein Anhang angehängt wird.
Wir definieren zuerst unsere Variable att als Anhang
Quote:
Dim att As Attachment = Nothing
Danach bestimmen wir mit
Quote:
att = New Attachment("C:\Documents and Settings\All Users\Documents\SC\Anhang.txt")
den Pfad zu unserem anhang. Dieser ist in meinem Beispiel fest.
Ihr könnt diesen natürlich auch über eine Benutzereingabe bestimmen.

Quote:
If CheckBox1.Checked = True Then Msg.Attachments.Add(att)
Zu guterletzt bestimmen wir noch das der Anhang nur angehängt wird wenn die Checkbox markiert wird.

Mit mySmtpsvr.Send(Msg)senden wir dann unsere E-Mail die auf unseren eingebenen Daten basiert.

Zum Schluss noch eine Msgbox wenn alles gut läuft.
Quote:
MsgBox("E-Mail gesendet.", MsgBoxStyle.Information, Title:="Information")
Und
Quote:
Catch ex As Exception
MsgBox("E-Mail wurde nicht gesendet.", MsgBoxStyle.Critical, Title:="Fehler")
falls etwas schief läuft.



Geschafft !

Ich habe versucht dieses Tutorial so Anfängerfreundlich wie möglich zu halten und hoffe ihr konntet mir gut
durch dieses Tutorial folgen. Falls ihr euch nicht selbst durch den Code
arbeiten wollt biete ich euch noch das ganze VB.net Projekt zum Download an.

[Only registered and activated users can see links. Click Here To Register...]
05/08/2010 19:07 Jeoni#2
Sehr schön und nice erklärt.
Aber bitte noch Virenscan unter den Download packen, danke.
04/22/2012 11:51 Yauleen#3
Ich stimme Jeoni der mich auf dieses Tut aufmerksam gemacht hat völlig zu. super gemacht!!!