Gestion des courriels : exemple
authorSébastien CHAZALLET <s.chazallet@gmail.com>
Thu, 29 Nov 2012 14:49:35 +0000 (15:49 +0100)
committerSébastien CHAZALLET <s.chazallet@gmail.com>
Thu, 29 Nov 2012 14:49:35 +0000 (15:49 +0100)
module/Galerie/Module.php
module/Galerie/config/module.config.php
module/Galerie/src/Galerie/Controller/IndexController.php
module/Galerie/src/Galerie/Mail/MailSender.php [new file with mode: 0644]
module/Galerie/view/galerie/mail/test.phtml [new file with mode: 0644]

index a21e4ec..d75f4f3 100644 (file)
@@ -16,6 +16,7 @@ use Galerie\Model\GalerieTable;
 use Galerie\Model\GalerieInfoTable;
 use Galerie\Form\GalerieForm;
 use Galerie\Export\GalerieWorkbook;
+use Galerie\Mail\MailSender;
 
 use Custom\View\Helper\Format;
 
@@ -55,6 +56,7 @@ class Module implements
 
     public function getServiceConfig()
     {
+        $config = $this->getConfig();
         return array(
             'factories' => array(
                 'Galerie\Model\GalerieTable' => function($sm) {
@@ -76,6 +78,11 @@ class Module implements
                 'Galerie\Export\GalerieWorkbook' => function ($sm) {
                     return new GalerieWorkbook;
                 },
+                'Galerie\Mail\MailSender' => function($sm) use ($config) {
+                    $result = new MailSender;
+                    $result::initialize($config['mail']);
+                    return $result;
+                },
             ),
         );
     }
index 21c80cc..c760d83 100644 (file)
@@ -22,7 +22,9 @@ return array(
             'galerie/index/del' =>
                        __DIR__ . '/../view/galerie/index/del.phtml', 
             'galerie/index/view' =>
-                       __DIR__ . '/../view/galerie/index/view.phtml', 
+                       __DIR__ . '/../view/galerie/index/view.phtml',  
+            'galerie/mail/test' =>
+                       __DIR__ . '/../view/galerie/mail/test.phtml', 
         ), 
         'template_path_stack' => array(
             'galerie' => __DIR__ . '/../view',
@@ -138,6 +140,16 @@ return array(
                         ),
                         'verb' => 'get',
                     ),
+                    'mail' => array(
+                        'type'    => 'Literal',
+                        'options' => array(
+                            'route'    => '/mail',
+                            'defaults' => array(
+                                'action' => 'mail',
+                            ),
+                        ),
+                        'verb' => 'get',
+                    ),
 /*
                     'default' => array(
                         'type'    => 'Segment',
@@ -177,4 +189,9 @@ return array(
             ), 
         ), 
     ), 
+    'mail' => array(
+        'name' => 'free',
+        'host' => 'smtp.free.fr',
+        'port' => 25,
+    ),
 );
index 551d046..2bce519 100644 (file)
@@ -2,10 +2,14 @@
 
 namespace Galerie\Controller; 
 
+
 use Zend\Mvc\Controller\AbstractActionController; 
 use Zend\View\Model\ViewModel;
 use Zend\View\Model\JsonModel;
 
+use Zend\View\Renderer\PhpRenderer;
+
+
 use Galerie\Model\Galerie;
 
 class IndexController extends AbstractActionController 
@@ -15,6 +19,8 @@ class IndexController extends AbstractActionController
     private $_galerieInfoTable;
     private $_galerieForm;
     private $_galerieInfoExporter;
+    private $_galerieMailSender;
+    private $_viewResolver;
 
     private $_translator;
 
@@ -64,6 +70,24 @@ class IndexController extends AbstractActionController
         return $this->_galerieInfoExporter;
     }
 
+    private function _getGalerieMailSender()
+    {
+        if (!$this->_galerieMailSender) {
+            $sm = $this->getServiceLocator();
+            $this->_galerieMailSender = $sm->get('Galerie\Mail\MailSender');
+        }
+        return $this->_galerieMailSender;
+    }
+    
+    private function _getViewResolver()
+    {
+        if (!$this->_viewResolver) {
+            $sm = $this->getServiceLocator();
+            $this->_viewResolver = $sm->get('ViewResolver');
+        }
+        return $this->_viewResolver;
+    }
+
 
 
 
@@ -111,6 +135,33 @@ class IndexController extends AbstractActionController
     }
 
 
+    public function mailAction()
+    {
+        //Construction du courriel au format HTML.
+        $mail_viewmodel = new ViewModel(array(
+            'who' => 'World',
+        ));
+        $mail_viewmodel->setTemplate('galerie/mail/test');
+        $renderer = new PhpRenderer;
+        $renderer->setResolver($this->_getViewResolver());
+        $body_html = $renderer->render($mail_viewmodel);
+
+        // Envoi du courriel
+        $mailSender = $this->_getGalerieMailSender();
+        $mailSender->send(
+            's.chazallet@gmail.com', 'Moi',//'sender@example.com', 'Moi',
+            's.chazallet@gmail.com', 'Toi',//'to@example.com', 'Toi',
+            'Test', 'Hello World 4.', $body_html
+        );
+
+        // Création de la réponse
+        $response = $this->getResponse();
+        $response->setStatusCode(200);
+        $response->setContent('Mail Sent.');
+
+        return $response;
+    }
+
     public function listAction() 
     { 
         // Récupération de l'objet requête
diff --git a/module/Galerie/src/Galerie/Mail/MailSender.php b/module/Galerie/src/Galerie/Mail/MailSender.php
new file mode 100644 (file)
index 0000000..42424a2
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+
+namespace Galerie\Mail; 
+
+use Zend\Mail\Transport\Smtp as SmtpTransport;
+use Zend\Mail\Transport\SmtpOptions;
+use Zend\Mail\Message;
+
+use Zend\Mime\Part as MimePart;
+use Zend\Mime\Mime as Mime;
+use Zend\Mime\Message as MimeMessage;
+
+
+
+
+class MailSender
+{
+
+    protected static $transport = null;
+
+    public static function initialize($params)
+    {
+        static::$transport = new SmtpTransport();
+        static::$transport->setOptions(new SmtpOptions(array(
+            'name' => $params['name'],
+            'host' => $params['host'],
+            'port' => $params['port'],
+        )));
+    }
+
+
+    public function send(
+        $sender, $sender_name, $to, $to_name, $subject, $text_body, $html_body, $logo
+    ) {
+        // Création de la partie texte
+        $text = new MimePart($text_body);
+        $text->type = Mime::TYPE_TEXT;
+
+        // Création de la partie HTML
+        $html = new MimePart($html_body);
+        $html->type = Mime::TYPE_HTML;
+
+        // Création du message
+        $body = new MimeMessage();
+        $body->setParts(array($text, $html));
+        
+        $mail = new Message();        
+        $mail->setBody($body);
+        $mail->setFrom($sender, $sender_name);
+        $mail->addTo($to, $to_name);
+        $mail->setSubject($subject);
+
+        static::$transport->send($mail);
+    }
+
+}
+
diff --git a/module/Galerie/view/galerie/mail/test.phtml b/module/Galerie/view/galerie/mail/test.phtml
new file mode 100644 (file)
index 0000000..3aaf9a8
--- /dev/null
@@ -0,0 +1 @@
+<html><head><title>Test</title></head><body><p>Hello <strong><?php echo $who; ?></strong> 4.</p></body></html>