Sven Rautenberg: SMTP/sendmail

Beitrag lesen

Moin!

Moment, Moment. Verstehe ich das richtig: Du willst damit sagen, dass Unix zwischen PHP und dem SMTP-Server eine weitere Zwischenstation in Gestalt dieses Programms sendmail einfügt? Wie uneffizient ...

Ansich ja. PHP währe Durchaus in der Lage selbst (auch aus einem PHP-Script direkt und nicht aus dem Binär) SMTP-Server zu kontakten. Es nimmt sich aber im Vergleich zu Windows nichts, da dort auch ein SMTP-Server (entweder local oder der des Providers zwecks dynamischer IP-Adresse) zwischengeschaltet wird/werden muß.

Nein, das ist ganz und gar nicht uneffizient.

Das Problem von PHP ist ja ganz grundsätzlich, dass im Normalfall ein User auf die Ausgabe des Skriptes wartet - und der ist ungeduldig. Abgesehen von der normalerweise eingeschränkten Laufzeit von Skripten.

Eine Direktauslieferung der Mail direkt an den Zielserver verbietet sich daher. Das kostet viel zuviel Zeit: DNS-Lookup nach den MX-Records - wenn kein MX da ist, dann Lookup nach dem A-Record. Kontakt zum MX mit der höchsten Priorität. Wenn der nicht antwortet (TCP-Timeout), Kontakt mit dem nächsten MX... Bei erfolgreichem Kontakt Versandversuch. Problem: Was ist, wenn der SMTP-Server temporär den Mailempfang ablehnt (4xx-Status, z.B. durch Greylisting) - wer verwaltet dann die Warteschlange?

Deshalb ist es sehr schlau, wenn PHP die Mail einem lokalen Mailserver übergibt, und danach sofort weiter im Skript machen kann. Der lokale Mailserver kann dann im Hintergrund die Auslieferung der Mail übernehmen.

Und die Benutzung eines sendmail-Programms ist ebenfalls sehr effizient im Gegensatz zum TCP- oder Unix-Socket-Gehampel. Denn das sendmail gehört zum lokal installierten Mailserver und kennt sehr wahrscheinlich den schnellsten Weg, um über interne Interfaces die zu sendende Mail direkt in die Queue zu stellen. Genau deswegen liefern doch alle Sendmail-Ersatzserver ein sendmail-Programm mit, welches sich nach außen kommandokompatibel verhält.

Unter Linux ist eigentlich immer ein lokaler Mailserver installiert und verfügbar (nicht zwingend ist er auch korrekt konfiguriert, aber das ist das Problem des Admins). Unter Windows hingegen ist ein installierter Mailserver die absolute Ausnahme. Deshalb kontaktiert PHP unter Windows einen externen, aber im Verhältnis dennoch als "lokal" anzusehenden Mailserver über TCP/SMTP. PHP spricht nämlich für alle Mails immer den gleichen Mailserver an, und benötigt dort auch irgendeine Art von Einlieferungsberechtigung (SMTP-Auth oder IP-basiert, sofern der Server öffentlich erreichbar ist), ansonsten kommen die Mails nicht an.

- Sven Rautenberg

--
My sssignature, my preciousssss!