CakePHP 2: versenden von Emails (CakeEmail) debuggen

Möglichkeit 1: Debug-Einstellung setzen

Eine einfache Möglichkeit, um das Versenden von Emails in CakePHP 2.x zu testen, ist die Debug-Einstellung der Email Konfiguration. Dabei genügt das Setzen der Transport-Einstellung auf ‘Debug’ und schon wird der Inhalt der Email an der entsprechenden Stelle angezeigt:

<?php
// app/Config/email.php
class EmailConfig {
   public $default = array(
      'transport' => 'Debug',
      // ...

Dies funktioniert allerdings nur, wenn man sich die Ausgabe des aufgerufenen Scripts anzeigen lassen kann. Bei Cronjobs beispielsweise wird dies schon schwieriger.

Möglichkeit 2: eine eigene Transport-Klasse verwenden

Verwendet man eine eigene Transport-Klasse, dann lassen sich für Debug-Zwecke alle Emails an beliebiger Stelle ausgeben, abspeichern oder die Inhalte der Email uneingeschränkt weiterverarbeiten. Im nachfolgenden Beispiel sollen dazu alle Emails an eine vorher festgelegte Email-Adresse gesendet werden. Dies ermöglicht ein Debuggen aller Emails unabhängig vom Aufruf (Cronjob, HTTP-Request, …), da diese richtig versendet werden.

Die Verwendung einer eigenen Transport-Klasse ist ganz simpel. Im folgenden wird die eigene Transportklasse mit Beta benannt. Man erstellt sich eine Datei BetaTransport.php, speichert diese unter app/Network/Email/BetaTransport.php ab und füllt die Datei mit folgendem Inhalt:

<?php
// app/Network/Email/BetaTransport.php
App::uses('AbstractTransport', 'Network/Email');

class BetaTransport extends AbstractTransport
{
  public function send(CakeEmail $email)
  {
    // EmailTransport for beta tests. Send all emails to webmaster.
    $email->subject('[BETA to: '.array_shift($email->to()).'] '.$email->subject());
    $email->to('webmaster@example.com');
    // Send email
    $email->transport('Mail');
    return $email->send();
  }
}

Die Klasse BetaTransport überschreibt nun den Empfänger der ursprünglichen Email und setzt diesen (für Debug-Zwecke) in den Betreff der Email. Die Transportklasse ist einsatzbereit, sobald diese in der Email-Konfiguration aktiviert wird:

<?php
// app/Config/email.php
class EmailConfig {
   public $default = array(
      'transport' => 'Beta',
      // ...

One comment on “CakePHP 2: versenden von Emails (CakeEmail) debuggen

Leave a Reply to mark Cancel reply

Your email address will not be published. Required fields are marked *