This document is for a version of CakePHP that is no longer supported. Please upgrade to a newer release!
Le composant Email est une manière simple d’ajouter une fonctionnalité d’envoi de mail à votre application CakePHP. Utilisant les mêmes concepts de fichiers dispositions (layout) et de vues pour envoyer des emails au format html, texte ou les deux. Il offre le support de l’envoi via la fonction incluse dans PHP, via un serveur smtp ou un mode debug qui écrit dans un message flash de session. Il supporte l’envoi de fichiers joints et opère quelques vérifications/filtrages basics sur le header. Il y a quand même pas mal de choses que ce composant ne peut pas faire pour vous, mais il offre des fonctionnalités de démarrage.
Ci-dessous les valeurs qu’on peut positionner avant d’appeler
EmailComponent::send()
adresse de destination (string)
tableau des adresses en copie du message
tableau des adresses en copie cachée bcc (blind carbon copy)
adresse de réponse (string)
adresse email de retour utilisée en cas d’erreur (string) (pour les erreurs de démon de mail : mail-daemon/errors)
adresse de provenance (string)
sujet du message (string)
l’élément email à utiliser pour le message (situé dans
app/views/elements/email/html/
et
app/views/elements/email/text/
)
le layout utilisé pour l’email (situé dans
app/views/layouts/email/html/
et
app/views/layouts/email/text/
)
longueur à laquelle les lignes doivent être coupées. Défaut à 70. (integer)
format auquel vous souhaitez envoyer le message (string, valeurs
possibles : text
, html
ou both
)
tableau des fichiers à joindre (chemin relatif ou absolu)
comment envoyer le message (mail
, smtp
[requiert le
positionnement des smtpOptions ci-dessous] et debug
)
tableau associatif d’options pour smtp mailer (port
, host
,
timeout
, username
, password
, client
)
Il y a quelques autres choses qui peuvent être paramétrées, mais vous devriez vous référez à l’API pour plus d’informations
Si vous désirez envoyer des emails multiples dans une boucle, vous aurez besoin de re-initialiser les propriétés du composant avec la méthode reset. Cette initialisation doit précéder le positionnement des propriétés du nouvel email.
$this->Email->reset()
Pour envoyer un message sans utiliser de template, passez simplement le corps du message comme une chaîne (ou un tableau de lignes) à la méthode send(). Par exemple :
$this->Email->from = 'Quelqu\'un <[email protected]>';
$this->Email->to = 'Quelqu\'un d\'autre <[email protected]>';
$this->Email->subject = 'Test';
$this->Email->send('Corps du message !');
Pour obtenir à la fois des emails au format html et texte, vous aurez
besoin de créer deux gabarits (layouts), comme lorsque vous mettez en
place vos gabarits pour l’affichage de vos vues dans le navigateur. Vous
devrez mettre en place des gabarits par défaut pour les messages email.
Dans le répertoire app/views/layouts/
, il vous faudra placer la
structure minimum suivante :
email/
html/
default.ctp
text/
default.ctp
Ce sont les fichiers qui contiennent les modèles de gabarits par défaut pour vos messages. Des exemples ci-dessous :
email/text/default.ctp
<?php echo $content_for_layout; ?>
email/html/default.ctp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body>
<?php echo $content_for_layout; ?>
</body>
</html>
Dans le répertoire de code app/views/elements/email/
vous devrez
créer deux répertoires pour text
et html
à moins que vous ne
prévoyiez d’envoyer les messages que dans un des deux formats. Dans
chacun de ces répertoires, vous devrez créer les patrons (templates)
pour chaque type de message en se référant au contenu que vous envoyiez
à la vue en utilisant soit $this->set() soit le paramètre $contents de
la méthode send(). Quelques exemples simples sont montrés ci-dessous.
Pour ces exemples on appelle le patron (template) simple_message.ctp
text
Cher <?php echo $User['first']. ' ' . $User['last'] ?>,
Merci de votre intérêt.
html
<p>Cher <?php echo $User['first']. ' ' . $User['last'] ?>,<br />
Merci de votre intérêt.</p>
Dans votre contrôleur, vous devrez ajouter le composant au tableau de
composants $components
ou ajouter ce tableau $components à votre
contrôleur de cette façon :
<?php
var $components = array('Email');
?>
Dans cet exemple, nous allons écrire une méthode privée pour prendre en charge les messages email vers un utilisateur identifié par son $id. Dans votre contrôleur (le contrôleur User dans cet exemple) :
<?php
function _envoiMailNouvelUtilisateur($id) {
$Utilisateur = $this->Utilisateur ->read(null,$id);
$this->Email->to = $Utilisateur ['Utilisateur']['email'];
$this->Email->bcc = array('[email protected]');
$this->Email->subject = 'Bienvenue à ce truc très cool';
$this->Email->replyTo = '[email protected]';
$this->Email->from = 'Appli Web Extra Cool <[email protected]>';
$this->Email->template = 'simple_message'; // notez l'absence de '.ctp'
// Envoi en 'html', 'text' ou 'both' (par défaut c'est 'text')
$this->Email->sendAs = 'both'; // parce que nous aimons envoyer de jolis emails
// Positionner les variables comme d'habitude
$this->set('Utilisateur', $Utilisateur);
// Ne passer aucun argument à send()
$this->Email->send();
}
?>
Voilà pour l’envoi du message. Vous pourriez appeler cette méthode depuis une autre méthode de cette façon :
$this->_envoiMailNouvelUtilisateur( $this->Utilisateur->id );
Pour envoyer un email en utilisant un serveur SMTP, les étapes sont
similaires à l’envoi d’un message basique. Définissez la méthode de
distribution à smtp
et assignez toutes les options à la propriété
smtpOptions
de l’objet Email. Vous pouvez aussi récupérer les
erreurs SMTP générées durant la session, en lisant la propriété
smtpError
du composant.
/* Options SMTP */
$this->Email->smtpOptions = array(
'port'=>'25',
'timeout'=>'30',
'host' => 'votre.serveur.smtp',
'username'=>'votre_login_smtp',
'password'=>'votre_mot_de_passe_smtp',
'client' => 'nom_machine_smtp_helo'
);
/* Définir la méthode de distribution */
$this->Email->delivery = 'smtp';
/* Ne passer aucun argument à send() */
$this->Email->send();
/* Vérification des erreurs SMTP. */
$this->set('smtp-errors', $this->Email->smtpError);
Si votre serveur SMTP nécessite une authentification, assurez-vous de
définir les parmètres nom d’utilisateur et mot de passe dans
smtpOptions
, comme indiqué dans l’exemple.
Si vous ne savez pas ce qu’est un HELO SMTP, alors vous ne devriez pas
avoir besoin de définir le paramètre client
dans smtpOptions
.
Celui-ci est seulement nécessaire pour les serveurs SMTP qui ne
respectent pas pleinement la RFC 821 (SMTP HELO).