Arbeitstreffen Dienstprograme am 19. Juli

Marcel Pennewiß mailinglists at pennewiss.de
Mo Jul 4 21:36:33 CEST 2016


Hi,

da wir hier ja alle etwas lernen wollen...

On Sun, 3 Jul 2016 02:45:33 +0200
Marvin Beer <kontakt at marvinbeer.de> wrote:

> PHP nutzt sendmail.
> Man kann Sendmail sagen, dass dovecot (Die Brieftaube) alles an
> Postfix (MTA) weiterleiten soll.
> Da du mit Zertifikaten (StartTLS) arbeitest nehme ich an, dass du
> dovecot und Postfix bereits einsetzt?

...mag ich das ungern unkommentiert stehen lassen. Du vermischst da
einige Dinge.

Im Bereich Mail unterscheidet man

  * MTA (Mail Transfer Agent, z.B. Postfix, Exim, Sendmail, SSMTP)

    MTAs kommunizieren per SMTP und ist der Teil des Mailservers, der
    Mails per SMTP entgegennimmt und versendet

  * MDA (Mail Delivery Agent, z.B. Dovecot, Cyrus, Courier)

    MDAs kümmern sich um die Zustellung von Mails in Postfächern. Sie
    nehmen also von MTAs Mails entgegen - das passiert per LMTP (Local
    Mail Transfer Protocol) ähnlich wie SMTP, nur halt lokal. MDAs
    (Dovecot) leiden _nichts_ an MTAs (Postfix) weiter.

  * MUA (Mail User Agent, z.B. Thunderbird, Outlook, Roundcube)

    MUAs sind die üblichen Mailprogramme.

Von MTA und MDA gibt es jeweils üblicherweise nur einen auf dem Server.

Wie man daran sieht, kann man sendmail also nicht sagen, dass Dovecot
alles an Postfix weiterleiten soll.

Aber was meint die PHP-Konfiguration oder Linux-Systeme mit sendmail?

Sendmail kommt aus der Unixwelt und hat(te) eine extrem weite
Verbreitung. Deshalb gehen seit Jahren andere Programme davon aus, dass
sie ein konfiguriertes, funktionierendes Sendmail vorfinden. Wovon sie
aber eigentlich ausgehen: ein funktionierender MTA im System.

Wenn PHP also sendmail verwendet, dann nutzt es den lokalen MTA - ein
installiertes und konfiguriertes Postfix/SSMTP/Exim - Sendmail selbst
kommt im Linux-Bereich eher nicht mehr zum Einsatz. Alle MTAs stellen
aus Kompatibilitätsgründen einen sendmail-Befehl bereit, so dass sich
"verwendet Sendmail" weiterhin als Synonym gehalten hat.

Die meisten Distributionen bringen Postfix, Exim oder SSMTP als MTA.
Ohne weitere Konfiguration sind diese nur bedingt in der Lage Mails zu
versenden. Die Standardkonfigurationen führen dazu, dass die MTAs die
zu versendenten Mails _direkt_ an den Zielmailserver zustellen wollen.
Wie Marvin richtig schrieb akzeptieren die meisten Mailserver aus
SPAM-Vermeidungsgründen keine SMTP-Verbindungen von IP-Adressen aus
dynamischen IP-Pools und die Chance, dass die Mail ankommt ist relativ
gering. Funktionieren tut diese Konfiguration meist z.B. auf einem
Root-Server, der eine feste IP-Adresse hat.

Hinter einem DSL/Kabel/usw-Anschluss sollte man die Konfiguration
seines MTA anpassen und das Versenden über seinen Mailprovider
konfigurieren. Beim Mailprovider nutzt man Authentifizierung und
schaltet damit die Sperre für dynamische IP-Pools implizit aus.
Bei Postfix/Exim/SSMTP hinterlegt man dafür die Server- und Zugangsdaten
für ein Postfach (ich hab für jeden Server ein Extra-Server-Postfach
für Send-only) bei seinem Mailprovider. Einmal konfiguriert kann der
Server nun so ziemlich aus jeder Applikation (Smartmontools, mdadm für
RAID, PHP, Ruby, ...) ohne weitere Einstellungen Mails versenden. Das
ist eigentlich auch zu empfehlen - wenn man für root ein passendes Alias
hinterlegt kann einem das System Cron-Ausgaben, kaputte Festplatten
usw. mitteilen. Idealerweise sollte man den Absender
"root at NAME_DES_SERVER" per Rewrite noch auf was sinnvolles setzen.

Die "mail"-Funktion von PHP kann von sich aus (unter Linux) nur mit
einem MTA agieren, der einen sendmail-Befehl bereitstellt. Die
Mail-Funktion kann von sich aus _nicht_ mit SMTP-Servern (mit oder ohne
Anmeldung) agieren. Um aus der Misere herauszukommen bieten viele
PHP-Applikationen daher selbst die Möglichkeit und nutzen
Klassen/Bibliotheken, die SMTP-Zugang erlauben.

In dem genannten Beispiel sieht das nach der PEAR-Bibliothek aus und
auch damit sollte eine TLS-basierte Nutzung von SMTP möglich sein.

Was ich sagen wollte: Einen MDA/Dovecot braucht man also nicht, damit
PHP Mails versenden kann ;) Ich hoffe, dass das jetzt etwas klarer ist.

Bei Fragen: Fragen!

Grüße,
Marcel


Mehr Informationen über die Mailingliste erfurt