communityWir suchen ständig neue Tutorials und Artikel! Habt ihr selbst schonmal einen Artikel verfasst und seid bereit dieses Wissen mit der Community zu teilen? Oder würdet ihr gerne einmal über ein Thema schreiben das euch besonders auf dem Herzen liegt? Dann habt ihr nun die Gelegenheit eure Arbeit zu veröffentlichen und den Ruhm dafür zu ernten. Schreibt uns einfach eine Nachricht mit dem Betreff „Community Articles“ und helft mit das Angebot an guten Artikeln zu vergrößern. Als Autor werdet ihr für den internen Bereich freigeschaltet und könnt dort eurer literarischen Ader freien Lauf lassen.

TCP/IP Socket-Programmierung in C# - E-Mail verschicken Drucken E-Mail
Benutzerbewertung: / 982
SchwachPerfekt 
Geschrieben von: Kristian   
Sonntag, den 12. März 2006 um 02:20 Uhr
Beitragsseiten
TCP/IP Socket-Programmierung in C#
Daten senden und empfangen
Höhere Socketklassen
Multicast und Broadcast
Ping, Threads und asynchrone Sockets
Formulare im Internet senden
E-Mail verschicken
Alle Seiten

E-Mail verschicken

Vor dem Aufkommen von E-Mail wurden Nachrichten als Brief oder Telegramm, später als Fernschreiben und Teletex (die letzteren beiden waren immerhin schon digitale Übertragungsverfahren) sowie Telefax übermittelt. Ende der 1980er Jahre begann dann der Siegeszug der E-Mail – sie war eine der ersten Anwendungen, welche die Möglichkeiten des ARPAnets nutzte.

Das Format einer E-Mail wird heute durch den RFC 2822 festgelegt. Danach bestehen E-Mails nur aus Textzeichen (7-Bit-ASCII-Zeichen). E-Mails sind intern in zwei Teile geteilt: Den Header mit Kopfzeilen und den Body mit dem eigentlichen Inhalt der Nachricht. Die Header genannten Kopfzeilen einer E-Mail geben Auskunft über den Weg, den eine E-Mail genommen hat, und bieten Hinweise auf Absender, Empfänger, Datum der Erstellung und Stationen der Übermittlung. Der Body einer E-Mail ist durch eine Leerzeile vom Header getrennt und enthält die zu übertragenden Informationen in einem oder mehreren Teilen.

Eine E-Mail darf gemäß RFC 2822 Abschnitt 2.3 nur Zeichen des 7-Bit-ASCII-Zeichensatzes enthalten. Sollen andere Zeichen, wie zum Beispiel deutsche Umlaute, oder Daten, wie zum Beispiel Bilder, übertragen werden, müssen diese zuvor passend kodiert werden.

E-Mails werden vorwiegend per SMTP über das Internet und in lokalen Netzen übertragen. Das Simple Mail Transfer Protocol ist ein Protokoll der Internetprotokollfamilie und liegt in der Anwendungsschicht eine Ebene über der Transportschicht (TCP). Der verwendete Port ist 25 bzw. bei neueren Servern Port 587.

Das .NET Framework stellt für das Versenden von E-Mails separate Klassen zur Verfügung die im Namespace System.Net.Mail versammelt sind. Die Basisklasse für alle Übertragungen bildet die Klasse SmtpClient. Mit dieser Klasse lassen sich Nachrichten auf bequeme Art und Weise versenden. Im nachfolgenden Beispiel wird eine Nachricht synchron versendet. Dabei gilt es zu beachten das viele SMTP-Server eine Authentifizierung des Nutzers erfordern. Die Authentifizierung kann mittels der Klasse NetworkCredential erfolgen.

using System;
using System.Net.Mail;
 
namespace CodePlanet.Articles.ProgrammingSockets
{
    /// <summary>
    /// Versendet eine E-Mail über SMTP samt Bild als Anhang.
    /// </summary>
    public class SendMail
    {
        public static void Main(string[] args)
        {
            // Daten eingeben
            try {
                MailAddress from = new MailAddress("fromAdress", "Ali Baba");
                MailAddress to = new MailAddress("toAdress", "Forty Thieves");
                MailMessage message = new MailMessage(from, to);
                message.Subject = "Our Subject";
                message.Body = "This is a message from...";
                message.IsBodyHtml = false;
                message.Priority = MailPriority.High;
 
                // Ein Bild als Anhang mitsenden
                Attachment a = new Attachment("photo.jpg",
                    System.Net.Mime.MediaTypeNames.Image.Jpeg);
 
                message.Attachments.Add(a);
 
                // SMTP Server benötigt ggf. eine Authentfizierung!
                SmtpClient emailClient = new SmtpClient("smtp.domain.com", 587);
                System.Net.NetworkCredential SMTPUserInfo =
                    new System.Net.NetworkCredential("User", "Password");
                emailClient.UseDefaultCredentials = false;
                emailClient.Credentials = SMTPUserInfo;
                emailClient.Send(message);
                Console.WriteLine("Message Sent");
            } catch (SmtpException ex) {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}

Sollen viele Nachrichten versendet werden, ist oftmals die synchrone Lösung unzufriedenstellend. Auch in diesem Fall lassen sich mittels Callback asynchrone Operationen durchführen, die ein Blocking der Applikation verhindern. Das Versenden kann sequentiell ebenfalls von einem parallelen Thread ausgeführt werden.

Schluss

Damit haben wir das Ende dieses Tutorials erreicht. Der Bereich Sockets und insbesondere Protokolle würde allein schon ausreichen um ein Buch mit 500 Seiten zu füllen. Dieses Tutorial gibt lediglich einen kleinen Überblick über TCP/IP in der Programmiersprache C#.

Hoffentlich konnte der Artikel Ihnen die .NET Version von Winsock, sowie die wesentlichen Klassen für den Umgang mit dem Internet in C#, ein wenig näher bringen. Im Dateianhang sind neben den im Tutorial aufgeführten Beispielen noch einige weitere Quellcodes zu finden, die Sie sich bequem in Ruhe näher ansehen können. Happy Programming!



Zuletzt aktualisiert am Donnerstag, den 02. Januar 2014 um 23:03 Uhr
 
AUSWAHLMENÜ