Fragen zu PHP mail->newsletter ?smtp

51%

Cadet 4th Year
Registriert
Apr. 2008
Beiträge
102
Hab hier ca 350 Email-Adressen in der DB, da geht ab und an ein Newsletter raus:
  1. Formular: Eingabe von Betreff und Text
  2. DB Abfrage und in einer while-Schleife gehen die Mails mittels mail-Befehl raus.
Das dauert lange (4-5 Minuten). Die Seite "friert" quasi ein, danach sollte eine Liste der Adressaten erscheinen. Kommt nicht, da der Zeitabstand zwischen DB-Connect und einer neuerlichen Abfrage zu lange ist (dieses Problem sollte mit einem mysql_ping zu beheben sein oder einer anderen Zielseite mit neuerlichem Connect).
Da eine personifizierte Anrede verwendet wird, geht ein BCC nicht.

Aber nur mal so als Frage:
Geht der Versand via SMTP schneller als mit dem mail-Befehl?
Benötigen Mails mit Anhang noch mehr Zeit am Server?
Würde es mit BCC schneller gehen?

ps: phpmailer hatte ich schon mal in verwendung, der wird aber nur für mails <=100 empfohlen. schneller war er auch nicht.
 
Warum nicht erst die komplette Datenbank-Abfrage machen, Daten in einem Array zwischenspeichern und dann die Mails raushauen? mail(1) ist langsamer aber nach dem ersten Aufruf ist es im Cache und der Unterschied dürfte im Millisekundenbereich liegen pro gesendetem Newsletter.
 
Sagen wir es mal so mit SMPT ist es zumindest die schönere Methode.

Benötigen Mails mit Anhang noch mehr Zeit am Server?
Ja

Würde es mit BCC schneller gehen?
Ja aber mit BCC arbeitet man nicht allein schon aus Datenschutzgründen.


Du läuft meiner Ansicht nach in den Time Out von PHP rein wenn du den erhöhst solltes du dein Problem auch lösen können.
 
bzgl timeout, meinst du:
max_execution_time (38) oder max_input_time (60)
bedeutet das, dass nach ablauf dieser zeit keine mails mehr versendet werden?
 
kannst ja das ganze per ajax ausführen und dir die prozentangabe immer zurück geben lassen.. wird zwar auch nicht schneller sein aber sieht cooler aus
 
Ajax geht nicht schneller, aber es lässt den Browser nicht einfrieren und vor allem crasht das Script nicht, wenn irgendwann mal mehr Mails verschickt werden sollen als in max_execution_time rein passen.

Fazit: Immer eine asynchrone Methode verwenden. Niemand mag blockierendes Verhalten.

Ach ja: Newsletter per mail()... da kann dein Empfänger gleich im Spamordner suchen. Viele Filter reagieren da allergisch. Außerdem reagieren viele Provider allergisch, wenn sie viele Mails in kurzen Zeiträumen von einer Quelle erhalten.
 
" wenn irgendwann mal mehr Mails verschickt werden sollen als in max_execution_time rein passen."
das sind bei mir 38sec, das script läuft aber über 4 min.
mit anderen worten: dauert in der while-schleife der versand einer(!) Mail über 38 sec, kommt es zum abbruch, andernfalls wird mit jedem mail-Aufruf mail nachgetriggert. richtig, falsch, nicht ganz so...?

über ajax verfüge ich über ein profundes nullwissen, aber so ein simpler aufruf in einer schleife wird ja nicht so schwer zu realisieren sein.
 
Stimmt.. die effektive Berechnung der max_execution_time ist etwas eigenartig....

Was Ajax angeht: Du schreibst einfach in dein PHP-Script sinngemäß:
Hole n Adressen aus der Datenbank, beginnend ab Zähler m und versende an diese. Hierbei wählst du für n einen angenehm kleinen Wert (10-20). Relevant ist eher dein m. M wählst du aus einer GET-Variablen.
Über einen sich wiederholenden asynchronen Aufruf (per JavaScript) rufst du jetzt dein Script mit immer wieder steigendem m auf.
Den asynchronen Call selbst kannste dir ja massiv erleichtern, indem du ein JS-Framework wie jQuery oder Mootools nutzt. Dann haste keine IE-Bugs etc. an der Backe.
 
Die Max-Execution-Time ist nur die Zeit, die PHP "rechnet". Also wenn ein MySQL-Query Zeit verbraucht, weil es blocking io macht, so zählt dies auch nicht.
 
Nachdem die Seite nun schon einige Zeit in Betrieb ist, hier eine Zusammenfassung:

"Geht der Versand via SMTP schneller als mit dem mail-Befehl?"
Ja, von etwa 4minuten auf geschätzte 20-30sec verkürzt (phpmailer)

"Benötigen Mails mit Anhang noch mehr Zeit am Server?"
Nach dem Hochladen geht das Versenden genauso schnell wie ohne Anhang.

Als Rückmeldung für den User zeigt ein Balken den Fortschritt an (siehe link oben), klappt verblüffend gut. Die Mails dürften auch alle angekommen sein. Alle 15 E-Mails gibt es eine einfache DB-Abfrage, die Anzahl könnte man sicher auch 40 erhöhen. Danke für's Lesen und die Rückmeldungen.
 
Zuletzt bearbeitet:
Zurück
Oben