Zum Inhalt springen

Massen-Mails durch foreach-Schleife

Erstellt am 21. Juli 2014 · 2 Antworten · letzte Antwort am 25. Juli 2014

Tags: E-Mail-Versand, Frage

terrorhamster ·

Hallo zusammen,

ich habe derzeit ein etwas sehr merkwürdiges Problem. 😉
Es geht um eine Extension die E-Mails für Mail-Abos versenden soll. D.h. bei einer bestimmten Konstellation soll die Extension eine bzw. mehrere verschiedene E-Mails an viele Empfänger schicken. Das ganze hat auch in den Testings wunderbar geklappt, nicht mehr aber mit Einstellen der ganzen Produktiv-Abos. Hier bekomme ich nach langer Zeit einfach einen TimeOut.

Ich rufe die "$message = (new \TYPO3\CMS\Core\Mail\MailMessage());" sowie "$message->send()" dafür innerhalb einer foreach-Schleife auf, die sämtliche Empfänger abarbeitet. Nachdem es nun also bei ca. 200 Empfängern im Gegensatz zu meinen 2-3 Testempfängern nicht mehr funktioniert, gehe ich davon aus dass der Aufruf der MailMessage-Klasse einfach zu lange dauert.

Gibt es eine Möglichkeit die Mails in eine Art Warteschleife zu legen um das Script in einer annehmbaren Zeit abzuarbeiten und einen gültigen Server-Response geben zu können? Oder empfiehlt es sich bei "Massen-Mails" nicht über die Typo3-Mail-Funktion sondern einfach über PHP mail() zu gehen?

Julian.​Hofmann ·

Hallo.

terrorhamster schrieb

Oder empfiehlt es sich bei "Massen-Mails" nicht über die Typo3-Mail-Funktion sondern einfach über PHP mail() zu gehen?

Das Problem ist nichtd as Mittel, sondern die Menge. Wenn Du mit Deinen Golf 5 Umzugkisten wegfahren kannst, bei 150 aber feststellst, dass Du einige Touren fahren müsstest, dann hilft es auch nichts, den älteren Golf Deiner Eltern zu nehmen ;-)

Für Massenmails stößt Du an zwei Grenzen:
1. Die Skriptlaufzeit
2. Die Mail-Queue des versenden Servers

Für ersteres empfiehlt sich die Bildung einer Abarbeitunsgschlange udn deren Abarbeitung via mehrer Requests (um auf mehrere Skriptlaufzeiten zu setzen) oder die Abarbeitung via CLI (da auf CLI meist die Skiptlaufzeit deutlich länger sein das)

Zum zweiten wird irgendwann der Mailserver dichtmachen, wenn Du zuviel (gleichartige) Mails einreichst. Auch hierfür ist ggf. eine Entzerrung in mehrere Häppchen sinnvoll.

Viele Grüße
Julian

Velletti ·

und warum das Rad immer neu erfinden ?

es gibt im TER eine extension die heist "newsletter" die kann das alles was du willst und vermutlich noch mehr: ist akutell auch an 6.2 angepasst worden ..

die newsletter werden über einen CLI aufruf, getriggert durch einen Cronjob verschickt. Man kann die Anzahl der gleichzeitig zu verschickenden Mails einstellen inkl des Abstands, wann der nächste Schung verschickt werden soll. also z.b. alle 5 Minuten immer 100 Email

Zudem sind darin funktionen wie:

- Bounces automatisch zu handlen
- Abbestellungen zu verwalten
- Click zahlen oder Viewzahlen (über eingebettete Bilder)
- Testversand ein kleine Testgruppe
- NL Empfänger aus FE users, CSV Datei oder andere Tabelle
und was nicht sonst noch ...

zum Abgucken, wie die das gemacht haben auf jeden Fall hilfreich ...