yakamara / ynewsletter

15 stars 6 forks source link

Cronjob #19

Closed erraiva closed 3 years ago

erraiva commented 4 years ago

Hallo yakamara, ynewsletter ist für mich eine gute Alternative zum Multinewsletter und ich würde ihn gerne nehmen für ein Projekt. Hier kann ich z.B. eine Mehrfach-Anmeldung auf eine eMail-Adresse selbst mit meinen Kenntnissen erreichen. Die Menge der ynewsletter-Dateien ist übersichtlich und ich fände es super, wenn ynewsletter weiter entwickelt würde. Leider bin ich nur Redaxo-Anwender (das aber schon seit 15 Jahren), kein Entwickler, deshalb steige ich durch die Anbindung mit yform nicht durch. Was ich im Moment brauche, ist die Auslösung des Newsletter-Versands durch einen Cronjob, und das für mehrere Gruppen in einem Rutsch. Ich habe diese Frage schon in Slack gestellt, doch dort werden leider auch präzise Fragen allzuoft mit Gegenfragen beantwortet. Ich habe Druck seitens des Kunden und muss hier bald eine Lösung finden. Meine Frage: wo kann ich ansetzen?. Das Versendescript soll alle Gruppen mit einem Cronjob abschicken. Ein guter Hinweis, aus der Hüfte geschossen, würde mich ja vielleicht schon auf die Spur bringen. Danke und viele Grüße v. Heinz

dergel commented 4 years ago

Hallo Heinz,

ein zeitgesteuerter Versand ist bisher nicht geplant, halt ich aber für sinnvoll das nachzurüsten.

Schau mal hier: https://github.com/yakamara/redaxo_ynewsletter/blob/master/pages/send.php#L22

Da ist der eigentliche Versand. Ein Ansatz wäre alle Newsletter zu verschicken. die als ganzes Paket verschickt werden sollen und das über einen einmaligem Cronjob täglich zu tun.

Der Cronjob müsste dann so ähnlich aussehen wie in der oben genannten Zeile. Wichtig ist hier, dass es über den cronjob selbst laufen muss, da PHP Scripte nach einer gewissen Zeit einfach abbrechen und somit auch der Newsletter nicht nicht vollständig verschickt wäre.

Ist ein Ansatz.. aber es gibt zich Variationen die man sich überlegen könnte. lg

erraiva commented 4 years ago

Hallo Jan, besten Dank für deine Antwort, ich habe gestern einen ersten Schritt gemacht, in dem ich die ganze Versende-Aktion unabhängig vom Submit-Button in eine foreach-Schleife gelegt habe. Das war eigentlich der Durchbruch für mein Vorhaben. Meine Konstruktion ist eh ein bisschen anders. Ich lasse täglich über einen Server Cron eine eigene Tabelle in Redaxo mit Adressen füllen (nachdem sie vorher geleert wurde) Gleichzeitig werden die YNewsletter auf "offen" gestellt und das Log geleert. Die Adressen kommen aus einer (externen) Adressdatenbank, sie haben hier dann alle Angaben, die yNewsletter braucht, also auch die Gruppenzuordnung. Ynewsletter macht ja sehr schön eine Kontrolle über das Log, ob ein NL schon verschickt wurde und die verschickten NL werden auf "verschickt" gestellt. Das nützt mir sehr. Mein nächster Schritt ist, den Versand nicht über den Button auszulösen, sondern über den Zugriff auf die Seite mit einem CronJob aus Redaxo. Die Seite wird auch schon aufgerufen, jetzt muss nur noch der Button weg ;-) Was hälst du von diesem Vorgehen?

Viele Grüße Heinz

Am 13.07.2020 um 12:02 schrieb Jan Kristinus notifications@github.com:

Hallo Heinz,

ein zeitgesteuerter Versand ist bisher nicht geplant, halt ich aber für sinnvoll das nachzurüsten.

Schau mal hier: https://github.com/yakamara/redaxo_ynewsletter/blob/master/pages/send.php#L22 https://github.com/yakamara/redaxo_ynewsletter/blob/master/pages/send.php#L22 Da ist der eigentliche Versand. Ein Ansatz wäre alle Newsletter zu verschicken. die als ganzes Paket verschickt werden sollen und das über einen einmaligem Cronjob täglich zu tun.

Der Cronjob müsste dann so ähnlich aussehen wie in der oben genannten Zeile. Wichtig ist hier, dass es über den cronjob selbst laufen muss, da PHP Scripte nach einer gewissen Zeit einfach abbrechen und somit auch der Newsletter nicht nicht vollständig verschickt wäre.

Ist ein Ansatz.. aber es gibt zich Variationen die man sich überlegen könnte. lg

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/yakamara/redaxo_ynewsletter/issues/19#issuecomment-657461691, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEEY7LHQDXTVCSTSDT6PWZTR3LLUNANCNFSM4OXH5IKA.

erraiva commented 4 years ago

Hallo Jan, ich habe das jetzt. So klappt es bei mir:

In die ynewsletter.php unten die Funktion einbinden: public static function cronSend() { $nllog = ''; $open_newsletters = rex_ynewsletter::query()->where('status', 0)->orderBy('id', 'desc')->find(); if(count($open_newsletters) == 0) { $nllog.= 'keine Newsletter zu verschicken'; } else { foreach ($open_newsletters as $obj) { $newsletter = rex_ynewsletter::get($obj->id); $newsletter->sendPackage($size = 0); $nllog.= '<br>'.$newsletter->ynewsletter_user_count.'verschickt an '.$newsletter->subject.' [id='.$newsletter->id.']'; } } }

... und in Redaxo einen Cron anlegen: Script PHP mit: rex_ynewsletter::cronSend(); LG Heinz

dergel commented 3 years ago

Ich nehme das nur als Doku mit auf .. Danke für den Code, habe ich minimal angepasst und in die neue Doku von YNewsletter gelegt.