in2code-de / powermail

This is the official repository of the TYPO3 extension powermail! Powermail is a well-known, editor-friendly, powerful and easy mailform extension for TYPO3
https://in2code.de
86 stars 166 forks source link

Disclaimer mail doesn't use overwrite mail setting #815

Open kveldscholten opened 1 year ago

kveldscholten commented 1 year ago

The disclaimerAction() doesn´t use my overwrite mail address. No matter which settings, the e-mail address specified by the user is always used

I have test it with

plugin.tx_powermail.settings.setup.sender.overwrite.senderEmail = TEXT
plugin.tx_powermail.settings.setup.sender.overwrite.senderEmail.value = server@domain.org
plugin.tx_powermail.settings.setup.sender.overwrite.senderName = TEXT
plugin.tx_powermail.settings.setup.sender.overwrite.senderName.value = Server from domain.org

plugin.tx_powermail.settings.setup.receiver.overwrite.senderEmail = TEXT
plugin.tx_powermail.settings.setup.receiver.overwrite.senderEmail.value = server@domain.org
plugin.tx_powermail.settings.setup.receiver.overwrite.senderName = TEXT
plugin.tx_powermail.settings.setup.receiver.overwrite.senderName.value = Server from domain.org

TYPO3: 11.5.16 Powermail: 10.4.3

Teisi commented 4 months ago

I can confirm this with TYPO3: 12.4.11 and Powermail: 12.2.0

Possible solution: SendDisclaimedMailPreflight.php Line 77 set senderEmail to mail address from $mail: From: 'senderEmail' => $senderService->getSenderEmail(), To: 'senderEmail' => $mail->getSenderMail(),

Function with this possible solution:

    /**
     * @param Mail $mail
     * @return void
     * @throws InvalidConfigurationTypeException
     * @throws ExceptionExtbaseObject
     */
    public function sendMail(Mail $mail): void
    {
        $receiverService = GeneralUtility::makeInstance(
            ReceiverMailReceiverPropertiesService::class,
            $mail,
            $this->settings
        );
        $senderService = GeneralUtility::makeInstance(
            ReceiverMailSenderPropertiesService::class,
            $mail,
            $this->settings
        );

        foreach ($receiverService->getReceiverEmails() as $receiver) {
            $email = [
                'template' => 'Mail/DisclaimedNotificationMail',
                'receiverEmail' => $receiver,
                'receiverName' => $receiverService->getReceiverName(),
                'senderEmail' => $mail->getSenderMail(),
                'senderName' => $senderService->getSenderName(),
                'replyToEmail' => $senderService->getSenderEmail(),
                'replyToName' => $senderService->getSenderName(),
                'subject' => ObjectUtility::getContentObject()->cObjGetSingle(
                    $this->conf['disclaimer.']['subject'],
                    $this->conf['disclaimer.']['subject.']
                ),
                'rteBody' => '',
                'format' => $this->settings['sender']['mailformat'],
                'variables' => ['mail' => $mail],
            ];
            $this->sendMailService->sendMail($email, $mail, $this->settings, 'disclaimer');
        }
    }

Test TypoScript:

plugin.tx_powermail {
    settings {
        sender.attachment = 1
        setup {
            receiver {
                overwrite {
                    senderEmail = TEXT
                    senderEmail.value = test@test.com

                    replyToName = TEXT
                    replyToName.value >
                    replyToName.data = GP:tx_powermail_pi1|field|name

                    replyToEmail = TEXT
                    replyToEmail.value >
                    replyToEmail.data = GP:tx_powermail_pi1|field|email
                }
            }

            sender {
                default {
                    senderEmail = test@test.com
                }
                overwrite {
                     senderEmail = TEXT
                     senderEmail.value >
                     senderEmail.value = test@test.com
                }
            }

            optin {
                overwrite {
                    senderEmail = TEXT
                    senderEmail.value = test@test.com
                }
            }
        }
        receiver {
            overwrite {
                senderEmail = test@test.com
            }
        }
    }
}

EDIT: i overwrite this method (short fast fix) with: https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Xclasses/Index.html

chrissonntag commented 1 month ago

This problem can be solved by extending the respective TypoScript file https://github.com/in2code-de/powermail/blob/master/Configuration/TypoScript/Main/Configuration/08_Disclaimer.typoscript

There should be at least the following assignments:

plugin.tx_powermail.settings.setup {
  disclaimer {
    ...

    overwrite {
      senderName = TEXT
      senderName.value = {$plugin.tx_powermail.settings.disclaimer.overwrite.senderName}

      senderEmail = TEXT
      senderEmail.value = {$plugin.tx_powermail.settings.disclaimer.overwrite.senderEmail}
    }
  }
}

Then it would be possible to overwrite those values using the respective constants. Alternatively one can add those values in their site_package or directly via the TypoScript module.

If desired I can provide a PR for this.