Blog

Redirection des e-mails d’une application CakePHP pendant les développements

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 :
[cce_php]
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);
}
}
[/cce_php]

Il vous suffit alors de déclarer cette configuration dans votre fichier de Config/bootstrap.php :
[cce_php]
Configure::write(‘Emails’ => array(
‘TestEmails’ => array(‘user@example.com’) // emails to use as recipients on not production environment
))
[/cce_php]

Et de configurer le transport dans le fichier Config/email.php :
[cce_php]
class EmailConfig {

public $default = array(
‘transport’ => ‘Wip’,
‘to’ => null,
// ….
);

}
[/cce_php]

Et voilà, maintenant tous les e-mails sont redirigés vers user@example.com tant que le debug n’est pas défini à 0.