Versandmethode Debug + background_job

  • Affected Version
    WoltLab Suite 5.2

    Setzt man die E-Mail-Versandmethode auf Debug (Ordner mit .eml-Dateien) (vermutlich tritt das Problem auch bei Debug (mbox) auf) landen die E-Mails trotzdem in wcf1_background_job und werden dann irgendwann doppelt als Debug-Datei erstellt.

    • Official Post

    Hallo,

    landen die E-Mails trotzdem in wcf1_background_job

    das würde ich erst einmal nicht per se als Fehler bezeichnen. Für einen synchronen Test des E-Mail-Layouts kann beispielsweise Email::debugDump() genutzt werden.

    und werden dann irgendwann doppelt als Debug-Datei erstellt.

    das wiederum schon. Wird dieselbe E-Mail tatsächlich doppelt im Maildir zugestellt?

  • Sie landen eben in wcf1_background_job und werden dann irgendwann abgearbeitet und landen nochmals als Debug-Datei im Maildir-Verzeichnis.

  • Wieso landen die E-Mails übernoch in der wcf1_background_job, wenn man eine Debug-Versandmethode ausgewählt hat? Ich nutze diese lokal, um E-Mails auf die richtige Formatierung zu prüfen, da ich lokal keinen Mailserver habe und auch im ACP keinen externen angegeben habe.


    Die Debug-Versandmethoden erstellen mir dann die E-Mails direkt so, dass ich diese in Thunderbird auf Korrektheit prüfen kann. Wenn diese jetzt aber nach X Stunden dann nochmals im log-Verzeichnis landen, weil sie auch in der wcf1_background_job sind, ist das für mich sehr verwirrend, weil es alte E-Mails sind.

  • Vllt. noch anzumerken: Ich sende meine E-Mails synchron per


    Code
            foreach ($mail->getEmail()->getJobs() as $job) {
                BackgroundQueueHandler::getInstance()->performJob($job);
            }
    • Official Post

    Hallo,

    Wieso landen die E-Mails übernoch in der wcf1_background_job, wenn man eine Debug-Versandmethode ausgewählt hat?

    Auch die Debug-Mailer versenden generell durch die Background-Queue, da diese nicht gesondert behandelt werden. Entsprechend ist es notwendig, dass die E-Mails in der Background-Queue landen, damit diese zugestellt werden können.


    Ich weiß natürlich nicht, was du in deinem eigenen Code machst, deine Fehlerbeschreibung ist leider nicht überaus präzise.

  • Beispielcode:


    PHP
            // send email to admins
            $mail = new SimpleEmail();
            $mail->setSubject("Gutschein-Code eingelöst");
            $mail->getEmail()->addRecipient(new Mailbox(MAIL_ADMIN_ADDRESS));
            $mail->setMessage("Gutscheincode \"{$this->discountCode}\" wird versucht einzulösen");
    
            // send mail immediately
            foreach ($mail->getEmail()->getJobs() as $job) {
                BackgroundQueueHandler::getInstance()->performJob($job);
            }

    Versandmethode: Debug (Ordner mit .eml-Dateien)


    Wird der Code nun ausgeführt, dann wird mir direkt nach dem Ausführen die E-Mail unter log/Maildir abgelegt. Jedoch ist der Job weiterhin in der wcf1_background_job Tabelle drin und wird dann zu einem späteren Zeitpunkt nochmals erstellt.

    Mir scheint hier der Eintrag nicht korrekt gelöscht zu werden?

    • Official Post

    Hallo,

    Wird der Code nun ausgeführt, dann wird mir direkt nach dem Ausführen die E-Mail unter log/Maildir abgelegt.

    So weit korrekt und nachvollziehbar.

    Jedoch ist der Job weiterhin in der wcf1_background_job Tabelle drin und wird dann zu einem späteren Zeitpunkt nochmals erstellt.

    Hier aber nicht mehr. Hast du zu einem späteren Zeitpunkt irgendwo noch ein ->send() in deinem Code?

    Mir scheint hier der Eintrag nicht korrekt gelöscht zu werden?

    Nicht zutreffend. Der Eintrag wird im Falle von performJob() gar nicht erst eingetragen. Lediglich, wenn der Versand eine Exception wirft, dann landet die E-Mail auch in der Datenbank-Tabelle.

  • Code
    O:52:"wcf\system\background\job\EmailDeliveryBackgroundJob":4:{s:8:"*email";O:22:"wcf\system\email\Email":10:{s:9:"*sender";O:24:"wcf\system\email\Mailbox":3:{s:10:"*address";s:14:"foo@foo.com";s:7:"*name";s:5:"chris";s:11:"*language";O:26:"wcf\data\language\Language":5:{s:8:"*items";a:0:{}s:15:"*dynamicItems";a:0:{}s:34:"wcf\data\language\Languageeditor";N;s:9:"packageID";i:8;s:7:"*data";a:7:{s:10:"languageID";i:1;s:12:"languageCode";s:2:"de";s:12:"languageName";s:7:"Deutsch";s:11:"countryCode";s:2:"de";s:9:"isDefault";i:1;s:10:"hasContent";i:0;s:10:"isDisabled";i:0;}}}s:10:"*replyTo";O:24:"wcf\system\email\Mailbox":3:{s:10:"*address";s:14:"foo@foo.com";s:7:"*name";N;s:11:"*language";r:6;}s:13:"*recipients";a:1:{s:14:"foo@foo.com";a:2:{s:4:"type";s:2:"to";s:7:"mailbox";O:24:"wcf\system\email\Mailbox":3:{s:10:"*address";s:14:"foo@foo.com";s:7:"*name";N;s:11:"*language";r:6;}}}s:12:"*messageID";s:40:"5371c948f4414536905f0b0f379a53f320d656f0";s:13:"*references";a:0:{}s:12:"*inReplyTo";a:0:{}s:7:"*date";O:8:"DateTime":3:{s:4:"date";s:26:"2020-10-19 07:42:05.000000";s:13:"timezone_type";i:1;s:8:"timezone";s:6:"+00:00";}s:10:"*subject";s:25:"Gutschein-Code eingelöst";s:15:"*extraHeaders";a:0:{}s:7:"*body";O:36:"wcf\system\email\mime\MimePartFacade":1:{s:11:"*mimePart";O:39:"wcf\system\email\mime\PlainTextMimePart":5:{s:11:"*template";s:15:"email_plaintext";s:14:"*application";s:3:"wcf";s:10:"*mailbox";r:26;s:10:"*content";s:45:"Gutscheincode "asd" wird versucht einzulösen";s:11:"*mimeType";s:10:"text/plain";}}}s:15:"*envelopeFrom";r:3;s:13:"*envelopeTo";r:26;s:57:"wcf\system\background\job\AbstractBackgroundJobfailures";i:1;}
  • Ich nutze Vagrant.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!