Mailer

La classe SMailer vous permet, comme son nom l'indique, d'envoyer des mails depuis votre application. Pour l'instant, un seul mode d'envoi est disponible, qui s'appuie sur la méthode mail() de PHP.

Vous pouvez générer une sous-classe de SMailer à l'aide de la commande suivante :

php scripts/generate.php mailer notifier

La classe générée sera placée dans le dossier app/models, et un dossier app/views/notifier sera créé, dans lequel vous pourrez placer vos templates.

Le principe d'utilisation de SMailer consiste à créer des méthodes définissant les attributs du mail à envoyer. Par exemple :

class Notifier extends SMailer
{
    public function signup_notification($user)
    {
        $this->to = $user->email;
        $this->from = 'admin@mydomain.com';
        $this->subject = 'Your account registration';
        $this->body = array('account' => $user);
    }
}

Les attributs disponibles sont les suivants :

  • to : une ou plusieurs (un tableau) adresses auxquelles délivrer le message
  • from : l'adresse de l'expéditeur
  • cc
  • bcc
  • subject : le sujet du message
  • content_type : par défaut, text/plain

Templates

Comme pour la classe SActionController, chaque méthode de votre classe doit correspondre à un template portant le nom de la méthode. Pour l'exemple ci-dessus, le template serait app/views/notifier/signup_notification.php.

Si vous avez affecté un tableau de variables à la propriété $this→body, elles seront accessibles comme variables locales dans le template :

Dear <?= $account->name; ?>,
Thanks for signing up !

Notez que vous pouvez utiliser des helpers dans ces templates, tout comme avec les templates de contrôleurs.

Vous pouvez envoyer un mail en HTML en créant un template HTML et en précisant le content-type text/html :

class Notifier extends SMailer
{
    public function signup_notification($user)
    {
        ...
        ...
        $this->content_type = 'text/html';
    }
}

Envoi de mail

Des méthodes “virtuelles” vous permettent d'envoyer le mail désiré, ou bien de le créer pour l'envoyer plus tard :

$notifier = new Notifier();
$notifier->deliver_signup_notification($user); // envoie le mail directement
 
$mail = $notifier->create_signup_notification($user); // renvoie une instance de SMail
$notifier->send($mail);

Messages multipart

Vous pouvez également créer des messages multipart très simplement :

class Notifier extends SMailer
{
    public function signup_notification($user)
    {
        $this->to = $user->email;
        $this->from = 'admin@mydomain.com';
        $this->subject = 'Your account registration';
 
        $this->parts[] = array('content_type' => 'text/plain', 'encoding' => 'quoted-printable',
                               'body' => $this->render_message('plain_signup', array('account' => $user)));
 
        $this->parts[] = array('content_type' => 'text/html',
                               'body' => $this->render_message('html_signup', array('account' => $user)));
    }
}

Fichiers joints

Vous pouvez de la même façon ajouter des fichiers joints, à partir d'un flux ou non :

class Notifier extends SMailer
{
    public function signup_notification($user)
    {
        $this->to = $user->email;
        $this->from = 'admin@mydomain.com';
        $this->subject = 'Your account registration';
 
        $this->attachments[] = array('content_type' => 'image/png', 'filename' => 'hello.png',
                                     'body' => file_get_contents(STATO_APP_ROOT_PATH.'/public/images/signup_hello.png'););
 
        $this->attachments[] = array('content_type' => 'application/pdf', 'filename' => 'rules.pdf',
                                     'body' => fopen(STATO_APP_ROOT_PATH.'/public/documents/site_rules.pdf', "r"););
    }
}
 
0_9/fr/mailer.txt · Last modified: 2009/04/03 02:27 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki