Indy
SMTP (TIdSMTP)
SMTP allgemein
Nachdem wir nun schon das POP besprochen haben, kommen wir nun zu dem Protokoll, das für den Mailtransport vom Absender bis zum Mailserver des Empfängers zuständig ist, dem Simple Mail Transfer Protocol (SMTP). Bereits das erste Wegstück zwischen Mailprogramm und Server des Mailproviders wird per SMTP zurückgelegt. Standardmäßig funktioniert SMTP ohne Authentifizierung. Dies brachte das Problem mit sich, dass jeder Mails über beliebige SMTP-Server mit beliebiger Absenderadresse verschicken konnte. Die meisten Mailprovider sind inzwischen dazu übergegangen, Schutzmechanismen zu implementieren. Die einen verwenden „SMTP after POP“ – erst wenn man sich beim Abruf von Mails per POP authentifiziert hat, hat man einen gewissen Zeitraum, um Mails zu verschicken. Andere setzen auf SMTP AUTH, eine Erweiterung des SMTP-Protokolls, die – wie auch POP – Benutzername und Passwort verlangt. Ist die Mail erst einmal im Internet, wird sie über mehrere SMTP-Server weitergereicht, bis sie im Zielsystem (Domäne) angekommen ist. Hier wird geprüft, ob der Benutzer, der vor dem @-Zeichen der E-Mail-Adresse angegeben ist, überhaupt ein Postfach auf diesem Server besitzt. Falls nicht, schickt der Mailerdämon die Mail mit einem entsprechenden Vermerk wieder zurück an den Absender. Jede Zwischenstation hinterlässt dabei eine Spur im Header der Mail, so dass sich der Weg nachverfolgen lässt.
Siehe auch
- RFC 821, Simple Mail Transfer Protocol (SMTP), August 1982
- RFC 1896, SMTP Service Extensions, Februar 1996
- RFC 2554, SMTP Service Extensions for Authentification, März 1999
IdSMTP
Hier ein kleines Beispielprogramm, das eine Mail versendet.
Auch hier wird wieder Gebrauch von IdMessage gemacht, die alle Daten der Nachricht hält.
Verbindung zum SMTP-Server aufbauen
Für den Verbindungsaufbau verwenden wir SMTP-Authentifizierung.
//Authentifizierung IdSMTP1.AuthType := TIdSMTPAuthenticationType.satDefault; //Benutzerdaten für Authentifizierung IdSMTP1.Username := edUser.Text; IdSMTP1.Password := edPassword.Text; //Server-Daten IdSMTP1.Host := edHost.Text; IdSMTP1.Port := 25; IdSMTP1.Connect;
Mail verschicken
Als erstes muss die komplette Nachricht zusammengebaut werden. Dafür kommt die Komponente TIdMessage zum Einsatz, auf die auf einer folgenden Seite gesondert eingegangen wird. Hat man diese Nachricht einmal, muss sie nur noch verschickt werden:
try // Nachricht zusammenbauen IdMessage1.From.Address := edFrom.Text; IdMessage1.Recipients.EMailAddresses := edTo.Text; IdMessage1.CCList.EMailAddresses := edCC.Text; IdMessage1.BCCList.EMailAddresses := edBCC.Text; IdMessage1.Subject := edSubject.Text; IdMessage1.Body := edContent.Lines; // ... und senden IdSMTP1.Send(IdMessage1); finally // Anschließend Verbindung trennen IdSMTP1.Disconnect; end;