Project

General

Profile

Feature #64047

Updated by Chris topher over 9 years ago

The current way to go when implementing mail delivery in an extbase extension seems to be http://wiki.typo3.org/How_to_use_the_Fluid_Standalone_view_to_render_template_based_emails. Peeking http://wiki.typo3.org/How_to_use_the_Fluid_Standalone_view_to_render_template_based_emails.Peeking at out ActionController, extbase could provide the same architecture for looking up and rendering mails. 

 I'm just throwing my idea in here with a bit of pseudo-code, as this may explain things better than when writing it out. IMHO this would help extension developers to concentrate on building their extension and spare a lot of time writing / copy-pasting code to handle mail deliveries. 


 *File structure* 
 <pre> 
 typo3conf/ext/<myext> 
   - Classes 
     - Mailer 
       - MyMailer.php 
   - Resources 
     - Private 
       - Templates 
         - MyMailer 
 </pre> 


 *MyMailer.php* 
 <pre> 
 class MyMailer extends \TYPO3\CMS\Extbase\Mailer\ActionMailer { 
     public function welcomeUserMail($user) { 
         /** @var \TYPO3\Core\Mail\Message */ 
         $mail = $this->createMail(); 

         /*  
           * ActionMailer base class sets layout and template automagically 
           * based on the current controller name and action name; This e.g. would be  
           * 
           *     $templateRootPath/@MailerClassName/@MailerMethodName.html 
           * 
           * The only thing you actually do in here is set / assign data, similiar to the controller. 
           */ 

         $mail->setTo($user->getEmail()); 
         $mail->setSubject('Successfully signed up!'); 
         $mail->assign('user', $user); // Exposed to the fluid standalone view 
         return $mail->send(); 
     } 
 } 
 </pre> 


 *MyController.php* 
 <pre> 
 public function confirmationAction() { 
     // ... creating $user ... 
    
     $mailer = makeInstance('MyMailer'); // or maybe instantiate it through DI's @inject? 
     $mailer->welcomeUserMail($user); 
 } 
 </pre>

Back