FriendsOfREDAXO / multinewsletter

Newsletter Addon für Redaxo 5
MIT License
16 stars 6 forks source link

Newsletterversand für eine Gruppe automatisiert anstoßen #24

Closed cukabeka closed 6 years ago

cukabeka commented 6 years ago

Hi,

ich möchte die Möglichkeit bauen, den Newsletter via IFTTT/Webrequest anzustoßen und suche dazu etwas im Code, wo der Mailversand angestoßen wird und ob es möglich ist, das einfach per Funktion aus einer anderen Funktion aufzurufen.

Das hier habe ich gefunden: https://github.com/TobiasKrais/multinewsletter/blob/b229eb8ea1cf36657bac918db654dafed55b643f/lib/multinewsletter_newsletter.php#L383

Aber ich finde nichts, was den eigentlichen Versand anstößt. Kannst Du mir hier weiterhelfen?

Viele Grüße

TobiasKrais commented 6 years ago

Hier hast du einen Einstiegspunkt und siehst auch gleich wie er verwendet wird: https://github.com/TobiasKrais/multinewsletter/blob/b229eb8ea1cf36657bac918db654dafed55b643f/pages/newsletter.php#L251

cukabeka commented 6 years ago

Danke, damit bin ich schon etwas weitergekommen, aber es hängt noch an 2 Punkten.

  1. Konzeptionell: Im Prinzip braucht es ja einen Cronjob, um die Funktion regelmäßig aufzurufen, bis alle Mails versendet sind. Bin mir noch nicht klar, wie ich das erreiche, wenn von außen ein Trigger kommt. Idee ist ja, einen neuen Newsletter zu versenden, wenn ein RSS Feed einen neuen Eintrag hat. IFTTT kann das ganz gut.

  2. Code. Ich habe also direkt im Cronjob Addon herumprobiert, ob sich ein Mailversand anstoßen lässt. Ergebnis: Das Skript wird zwar ausgeführt, aber es kommt noch keine Mail an.

<?php

$group_ids = array(4); // ID für Test-Gruppe
$article_id = 120;
$fallback_clang_id = MultinewsletterNewsletter::getFallbackLang();
$man_recipients = array();
$addon = rex_addon::get('multinewsletter');

var_dump(rex_config::get('multinewsletter', 'max_mails'));

$newsletterManager = new MultinewsletterNewsletterManager(rex_config::get('multinewsletter', 'max_mails'), rex::getTablePrefix());

$newsletterManager->prepare($group_ids, $article_id, $fallback_clang_id,$man_recipients);

    $number_mails_send = $newsletterManager->countRemainingUsers() % $addon->getConfig('max_mails');
    if($number_mails_send == 0) {
        $number_mails_send = $addon->getConfig('max_mails');
    }
    $sendresult = $newsletterManager->send($number_mails_send);
    if($sendresult !== TRUE) {
        $messages[] = rex_i18n::msg('multinewsletter_error_send_incorrect_user') .' '. $sendresult;
    }
    if(count($newsletterManager->last_send_users) > 0) {
        $message = rex_i18n::msg('multinewsletter_expl_send_success').'<br /><ul>';
        foreach($newsletterManager->last_send_users as $user) {
            $message .= "<li>";
            if($user->firstname != "" || $user->lastname != "") {
                $message .= $user->firstname ." ". $user->lastname .": ";
            }
            $message .= $user->email ."</li>";
        }
        $message .= "</ul>";
        echo rex_view::success($message);
    }
echo "+++ done";

?> 
//UPDATED 11.7.

Hast Du noch ein paar Ideen, wie das funktionieren könnte?

TobiasKrais commented 6 years ago

Kannst du bitte noch ein paar Daten liefern: Wie viele Empfänger hat der Newsletter? Welcher Wert steht in der rex_config::get('podcastmanager', 'max_mails')? Was steht im cronjob log?

cukabeka commented 6 years ago

Also aktuell ist nur ein einziger Testuser eingetragen. Hab den Dump für die max Mails vorliegen, müssten die Standard Einstellungen sein, ist aber NULL. Muss nochmal anders versuchen, das abzurufen. Cronjob Log sagt nix.

TobiasKrais commented 6 years ago

Bist du sicher, dass dein cronjob überhaupt erfolgreich abgeschlossen wird?

cukabeka commented 6 years ago

Oh, das war natürlich Unsinn. Ich habe das oben einmal entsprechend korrigiert.

Jetzt bekomme ich die Seetings aus dem Addon: string(2) "15"

Aber immer noch keine Mail..

TobiasKrais commented 6 years ago

Du meinst, dass die Zeile var_dump(rex_config::get('multinewsletter', 'max_mails')) das Ergebnis string(2) "15" ausgibt? Danach geht wohl was schief, sonst würde ja auch dein Echo am Schluss ausgegeben werden. Dann setze noch ein paar var_dumps zum debuggen in den Code und taste dich an die fehlerhafte Stelle ran.

TobiasKrais commented 6 years ago

Hast du Lust ein Modul zu bauen? Ich komme momentan nicht dazu. Hier ein Beispiel: https://github.com/TobiasKrais/d2u_helper/blob/4fb1d4009a28395e204baa3d64094ccdb8580c6f/modules/11/1/output.php

cukabeka commented 6 years ago

Im Prinzip gern, allerdings scheitere ich schon daran, den Code so zu stricken, dass überhaupt per cronjob eine Mail versendet wird. Was passiert denn, wenn die "prepare" aufgerufen wird? Siehe der Code oben. Leider verstehe ich noch nicht, wie ich $newsletterManager->send benutzen bzw $newsletterManager->last_send_user debuggen kann.

TobiasKrais commented 6 years ago

OK, ich verstehe. Ich kenne mich mit Web Requests auch nicht aus und müsste mich komplett rein arbeiten. Mal eine ganz grundsätzliche Frage: was ist denn den Use Case um den Newsletter via IFTTT/Webrequest anzustoßen?

TobiasKrais commented 6 years ago

Habe mich entschieden den Punkt nicht umzusetzen. Wenn durch einen Webservice Dienste Angebote werden, dann muss das entsprechend abgesichert sein um kein Einfallstor in Redaxo aufzubauen. Damit kenne ich mich nicht gut genug aus. Da ist mit zu heiß.

cukabeka commented 6 years ago

OK, im Prinzip geht es gar nicht um die Webrequests. Das Szenario ist, dass ich einen Newsletter verschicken will, wenn ein Ereignis im Redaxo-System erfolgt.

Das kann zB sein, wenn ein neuer Artikel in einer Kategorie online gestellt wird oder in einer yForm Tabelle ein neuer Eintrag erfolgt. Also geht es hier derzeit vor allem um den automatisiert angestoßenen Versand, bei dem ich an eine definierte Gruppe einen definierten Artikel verschicke. Dieser enthält dynamisch generierte Inhalte aus unterschiedlichen Bereichen des Systems, die zu diesem Zeitpunkt verschickt werden sollen.

Der Webrequest kann dabei auch komplett außen vor gelassen werden. Ich passe den Titel entsprechend an.

TobiasKrais commented 6 years ago

Ich verstehe. Das ist jetzt schon möglich. Gegen Bezahlung würde ich da was programmieren.

TobiasKrais commented 6 years ago

In Version 3.2.0 ist das nun möglich. Siehe FAQ in der Hilfe der Version.

cukabeka commented 6 years ago

Sehr cool! Danke Dir! Bekomme gerade beim Update noch den Error im Backend, wenn ich nach dem Update via Installer/URL-Installer versuche auf die Backend-Seite zuzugreifen:

Error while executing statement "SELECT archive_id FROM rex_375_sendlist GROUP BY archive_id"! SQLSTATE[42S02]: Base table or view not found: 1146 Table 'rex_375_sendlist' doesn't exist

Evtl ein Update-SQL dazupacken?

TobiasKrais commented 6 years ago

Das Update ist schon drin: https://github.com/TobiasKrais/multinewsletter/blob/41cbae88921b7db44fc162277cc54fdda83c5be8/update.php#L94 Bei Update über den Installer läuft es bei mir bei allen Installationen sauber durch. Versuche bitte nochmals über die Addonverwaltung das Addon zu reinstallieren.

cukabeka commented 6 years ago

Ah okay, hatte Sorge, dass meine Mail-Adressen-Einträge dabei gelöscht werden könnten. Bin gerade noch nicht dazu gekommen, das in Ruhe komplett zu checken.

Danke für deine Antwort! Liebe Grüße

Tobias Krais notifications@github.com schrieb am Do., 13. Sep. 2018, 20:49:

Das Update ist schon drin: https://github.com/TobiasKrais/multinewsletter/blob/41cbae88921b7db44fc162277cc54fdda83c5be8/update.php#L94. Bei Update über den Installer läuft es bei mir bei allen Installationen sauber durch. Versuche bitte nochmals über die Addonverwaltung das Addon zu reinstallieren.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/TobiasKrais/multinewsletter/issues/24#issuecomment-421112646, or mute the thread https://github.com/notifications/unsubscribe-auth/AAqAkhVRQ9y636D5RVtgWSd7nIiSkHtxks5uaqi3gaJpZM4UsMBX .

TobiasKrais commented 6 years ago

Oder noch besser: setze per FTP in der package.yml des Addons die Versionssnummer zurück und mach dann das Update nochmals über den Installer. Dann sollten die Tabellen und auch die fehlenden Felder hinzugefügt werden.