Search code examples
typo3typo3-10.x

TYPO3 10.4.20: Send email with different template files not working


I have 2 forms on my TYPO3 custom extension. And a total of 3 template files is there.

Please look at my code, can you help me to point out what's wrong with it?

Now I got following error when I click on the submit button:

enter image description here

// Set user email template
if(!empty($arguments['requestform'])) {
    $setTemplateAdmin = $this->setTemplateAdmin();
    $setTemplateUser = $this->setTemplateUser();
}else{
    $setTemplateFreeTrialAdmin = $this->setTemplateFreeTrialAdmin();
}
exit;




//subject request Admin Template
public function setTemplateAdmin(){
    $this->view->setTemplatePathAndFilename(ExtensionManagementUtility::extPath('my_extension').
            'Resources/Private/Templates/my_extension/AdminEmail.html');
    $this->view->assignMultiple([
        'mailOutput' => $userData,
        'settings' => $this->settings,
        'baseurl' => $GLOBALS['TSFE']->config['config']['baseURL']
    ]);
    $mailBody = $this->view->render();
    $mailSent = $this->sendEmail($mailBody, $userData['email'], $this->settings, $userData['requestform']);
}

//subject request User template
public function setTemplateUser(){
    $this->view->setTemplatePathAndFilename(ExtensionManagementUtility::extPath('my_extensionn').
            'Resources/Private/Templates/my_extension/RequestSubUserEmail.html');
    $this->view->assignMultiple([
        'mailOutput' => $userData,
        'settings' => $this->settings,
        'baseurl' => $GLOBALS['TSFE']->config['config']['baseURL']
    ]);
    $mailBodyUser = $this->view->render();
    $mailSent = $this->sendEmailUser($mailBodyUser, $userData['email'], $this->settings, $userData['requestform']);
}

//Trial request user mail
public function setTemplateFreeTrialAdmin(){
    $this->view->setTemplatePathAndFilename(ExtensionManagementUtility::extPath('my_extension').
    'Resources/Private/Templates/my_extension/UserEmail.html');
    $this->view->assignMultiple([
        'mailOutput' => $userData,
        'settings' => $this->settings,
        'baseurl' => $GLOBALS['TSFE']->config['config']['baseURL']
    ]);
    $mailBody = $this->view->render();
    $mailSent = $this->sendEmail($mailBody, $userData['email'], $this->settings, $userData['requestform']);
}

// Send Email
public function sendEmail($mailBody, $userEmail, $settings, $requestform)
{
    $mail = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Mail\MailMessage::class);
    if(!empty($requestform)) {
        $mail
            ->from(new \Symfony\Component\Mime\Address($settings['adminfromemail'], $settings['adminfromname']))
            ->to(new \Symfony\Component\Mime\Address($settings['admintoemail']))
            ->subject($settings['subreqmailsubject'])
            ->html($mailBody)
            ->send();
    } else {
        $mail
            ->from(new \Symfony\Component\Mime\Address($settings['adminfromemail'], $settings['adminfromname']))
            ->to(new \Symfony\Component\Mime\Address($userEmail))
            ->subject($settings['adminmailsubject'])
            ->html($mailBody)
            ->send();
    }
}

// Send User Email for Subject Request Form
public function sendEmailUser($mailBodyUser, $userEmail, $settings, $requestform)
{
    $mail = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Mail\MailMessage::class);
    $mail
        ->from(new \Symfony\Component\Mime\Address($settings['adminfromemail'], $settings['adminfromname']))
        ->to(new \Symfony\Component\Mime\Address($userEmail))
        ->subject($settings['subrequsermailsubject'])
        ->html($mailBodyUser)
        ->send();
}

$userEmail is the value email field. I think its value is not getting.

The form is not submitting it shows 500 error.


Solution

  • Pass with $userData the function call

    if(!empty($arguments['requestform'])) {
                $setTemplateAdmin = $this->setTemplateAdmin($userData);
                $setTemplateUser = $this->setTemplateUser($userData);
            }else{
                $setTemplateFreeTrialAdmin = $this->setTemplateFreeTrialAdmin($userData);
            }
            exit;
    

    And also declare the variable at function definition

        public function setTemplateAdmin($userData){
    //code here
    }