Wie richte ich PHP zum Senden von E-Mails über Apache ein? (Windows)

Wie richte ich PHP zum Senden von E-Mails über Apache ein? (Windows)

Ich richte einen Apache-Server (2.2.14) unter Windows ein und greife dabei auf Ideen einer vorhandenen XAMPP-Konfiguration zurück. Ich versuche jetzt, eine E-Mail-Funktionalität für PHP (5.3.1) einzurichten. (Es muss in der Lage sein, Anhänge zu verarbeiten, genau wie der XAMPP-Server.)

Ich habe festgestellt, dass XAMPP mitgefälschtes Sendmail für Windows, aber einige Dinge an der Konfiguration ergeben für mich keinen Sinn.

Hier sind einige Zeilen aus XAMPP php.ini:

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

Das ist komisch, weil:

  • Es heißt ausdrücklich "nur für Unix", aber
    • Ich sehe immer wieder Tutorials, die sagen, diese Zeile für Windows zu verwenden, und
    • der Beispieldateipfad würde unter Unix keinen Sinn ergeben
  • sendmail_pathist standardmäßig auskommentiert

Ich habe mich gefragt, ob sendmail.exedas überhaupt notwendig ist. Also habe ich auf meinem benutzerdefinierten Apache-Server, der nicht über verfügt sendmail.exe, php.inidie richtigen Informationen für SMTP, smtp_port, und hinzugefügt sendmail_from. Damit konnte er E-Mails senden! Aber er ist sehr langsam.

Dann ging ich zurück zum XAMPP-Server und benannte das sendmailVerzeichnis um, in der Hoffnung, Sendmail zu deaktivieren. Das funktionierte einigermaßen – mein PHP-Skript behauptete, es gesendet zu haben, aber es passierte nichts.

Ich bin also sehr verwirrt.

  • Mein XAMPP-Server ist sendmail_pathauskommentiert, verwendet aber anscheinend immer noch das Programm, auf das er verweist. Woher weiß er das?
  • Mein Apache-Server hat nichts in sendmail_path, kann aber irgendwie auch ohne dieses Attribut E-Mails versenden. Wie macht er das?

Was muss ich eigentlich tun, um den Apache-Server für den E-Mail-Versand zu konfigurieren?

Antwort1

Nach weiterer Suche und Prüfung scheint es, dass:

  1. Unter Windows muss die PHP-Funktion mail() E-Mails nicht unbedingt an ein anderes Programm auf demselben Computer weiterleiten; sie kann selbst eine Verbindung zu einem Mailserver herstellen.

  2. Dies ist jedoch ineffizient und langsam.

  3. Einrichtengefälschte Sendmailauf dem Servercomputer und das Verweisen php.inider sendmail_pathDirektive darauf beschleunigt das Senden von E-Mails erheblich. Ich persönlich stelle es mir so vor, als würde ich sendmail.exedie Daten in nette, verdauliche Häppchen zerlegen und sie dem Mailserver in den Mund spucken, wie eine Vogelmutter ihr Junges füttert. Mmmm! Aber vielleicht bin ich auch verrückt.

  4. Wenn Sie sendmail.exein eingeben C:\usr\bin, können einige Programme, die auf einem Unix-basierten Betriebssystem ausgeführt werden sollen, unter Windows ausgeführt werden.

Hier isteinige Infos im PHP-Handbuchdas hat mir geholfen, das herauszufinden.

Hinweis: Die Windows-Implementierung von mail() unterscheidet sich in vielerlei Hinsicht von der Unix-Implementierung. Erstens verwendet sie keine lokale Binärdatei zum Erstellen von Nachrichten, sondern arbeitet nur mit direkten Sockets, was bedeutet, dass ein MTA erforderlich ist, der auf einem Netzwerk-Socket lauscht (der sich entweder auf dem lokalen Host oder auf einem Remote-Computer befinden kann).

Und...

Hinweis: Es ist zu beachten, dass die Funktion mail() nicht für größere Mengen an E-Mails in einer Schleife geeignet ist. Diese Funktion öffnet und schließt für jede E-Mail einen SMTP-Socket, was nicht sehr effizient ist. Informationen zum Senden großer Mengen an E-Mails finden Sie in den Paketen » PEAR::Mail und » PEAR::Mail_Queue.

Antwort2

Apache ist nicht wirklich an der Konfiguration zum Senden von E-Mails beteiligt. Dies wird vollständig von PHP und dem in diesem Fall lokalen MTA erledigt. Der MTA ist fast immer Sendmail oder Postfix. Die Konfiguration hierfür befindet sich in der Datei php.ini im Abschnitt [Mail-Funktion] mit dem Namen sendmail_path.

verwandte Informationen