Redirection des e-mails d'une application CakePHP pendant les développements
⏲️ ~3 min de lecture
Publié le
par
Damien
cakephp
php
En phase de développement, il est possible d'envoyer les e-mails vers un fichier, mais que faire lorsque l'on est sur le site de développement/préproduction ? La base de données peut contenir des données de clients réelles, et il peut être intéressant de tester avec différents compte sans envoyer d'e-mail aux utilisateurs correspondants.
C'est là qu'interviennent les transport de CakePHP. Ce sont des classes permettant l'envoi d’e-mail selon certaines méthodes. Nous allons en créer un nouveau qui va rediriger tous les e-mail de l'application vers des adresses définies en configurations. Pour ça créons un fichier Lib/Network/Email/WipTransport.php dont voici le contenu :
App::uses('MailTransport', 'Network/Email');
class WipTransport extends MailTransport {
/**
* Overrides the default method to update the recipients during the test phase
*
* @param CakeEmail \$email CakeEmail
* @return array
* @throws SocketException When mail cannot be sent.
*/
public function send(CakeEmail $email) {
$testEmails = Configure::read('Emails.TestEmails');
if (!empty($testEmails) && Configure::read('debug') !== 0) {
$email->to($testEmails);
$email->cc(array());
$email->bcc(array());
}
return parent:end($email);
}
}
Il vous suffit alors de déclarer cette configuration dans votre fichier de Config/bootstrap.php
:
Configure::write('Emails' => array(
'TestEmails' => array('user@example.com') // emails to use as recipients on not production environment
))
Et de configurer le transport dans le fichier Config/email.php
:
class EmailConfig {
public $default = array(
'transport' => 'Wip',
'to' => null,
// ....
);
}
Et voilà, maintenant tous les e-mails sont redirigés vers user@example.com tant que le debug
n'est pas défini à 0
.
Cet article vous a plu ? Sachez que nous recrutons !