Zum Inhalt springen

Powermail: Receiver E-Mail Adresse im DataProcessor oder Finisher ändern

Erstellt am 3. Juni 2016 · 1 Antwort · letzte Antwort am 3. Juni 2016

Tags: Powermail, PHP, Frage

alsodenn ·

TYPO3 7.6.9
Powermail 3.0.2

Ich versuche anhand der ausgefüllten Felder die Empfänger E-Mail Adresse zu ändern. Zuerst versucht ich es mit einer userfunction wie in der Doku. Dies klappte aber nicht und da userfunc in der Zukunft wohl verschwinden werden, versuchte ich die Variante mit einer DataProcessor oder Finisher Klasse. Beides funktioniert aber auch nicht. Hier meine Ansätze:

Userfunc: (Die userfunc wird gar nicht ausgeführt...)

lib.sendtoemail = USER_INT
lib.sendtoemail.userFunc = Mexan\MxnTemplate\ManipulateReceiver->getEmail
<?php
class user_manipulatePowermailReceiver {

        public function getEmail() {                
                $email = 'vorname.nachname@gmail.com';               
                return $email;
        }
}
?>

DataProcessor:

plugin.tx_powermail.settings.setup {
     dataProcessors {
         1 {
             class = Vendor\Template\DataProcessor\DoSomethingDataProcessor
         }
     }
}
<?php
namespace Vendor\Template\DataProcessor;

use In2code\Powermail\DataProcessor\AbstractDataProcessor;

/**
 * Class DoSomethingDataProcessor
 *
 * @package Vendor\Ext\DataProcessor
 */
class DoSomethingDataProcessor extends AbstractDataProcessor
{

     /**
     * @var Mail
     */
    protected $mail;

    /**
     * @var array
     */
    protected $configuration;

    /**
     * @var array
     */
    protected $settings;

    /**
     * Will be called always at first
     *
     * @return void
     */
    public function initializeDataProcessor() {      
       
    }

    /**
     * MyDataProcessor
     *
     * @return void
     */
    public function doSomethingElseDataProcessor() {
        $mail = $this->getMail();
        $mail->setReceiverMail('vorname.nachname@mail.com');
        $this->setMail($mail);

        $settings = $this->getSettings();
        $settings['receiver']['email'] = 'vorname.nachname@mail.ch';

        $this->setSettings($settings);
    }
}

Wenn ich die Settings oder das Mail debugge, dann stehen die richtigen E-Mail Adresse drin, aber es wird nicht übernommen. Muss ich diese irgendwie speichern?

\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($this->getSettings(), 'settings 2');
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($this->getMail(), 'getMail 2');

Oder ist mein Ansatz komplett falsch?
Wer kann mir helfen?

einpraegsam.​net ·

1. Die Empfänger per UserFunc zu ändern, sollte kein Problem sein. Oftmals ergeben sich aber Probleme mit USER_INT - wenn diese in einer ungecachten Extension verwendet wird. Lieber USER nutzen... Dass UserFunc verschwinden wird, habe ich übrigens noch nicht gehört und ist mir auch völlig neu.

2. Mit einem DataProcessor kann man das Settings Array nicht ändern und dieses bestimmt die Empfänger.

3. Mit einem Finisher geht das auch nicht, weil der Finisher am Schluss ausgeführt wird - also wenn die Mail schon raus ist.

4. Was sonst noch ginge, wäre die Verwendung eines Signals (z.B: setReceiverEmails - siehe https://docs.typo3.org/typo3cms/extensions/powermail/ForDevelopers/SignalSlots/Index.html#signal-slots - dieses Signal befindet sich in der Klasse \In2code\Powermail\Domain\Service\ReceiverEmailService)

5. Es gibt eventuell auch noch andere Signale die in Frage kommen

6. Das hier wäre auch noch möglich: https://docs.typo3.org/typo3cms/extensions/powermail/ForAdministrators/BestPractice/DynamicReceiver/Index.html