Home » Tutorials » Netzwerk und Internet » Indy

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

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;

Beispielprogramm