El tutorial Jobeet

16.5. Enviando emails

Cuando el administrador activa la cuenta de un afiliado, se debe mandar un email a ese usuario confirmándole su suscripción e indicándole cuál es su token.

PHP dispone de muchas librerías buenas para mandar emails, como por ejemplo SwiftMailer, Zend_Mail y ezcMail. Como en los tutoriales de los próximos días haremos uso de algunos componentes del Zend Framework, vamos a utilizar Zend_Mail para enviar los emails.

16.5.1. Instalación y configuración del Zend Framework

La librería Zend_Mail forma parte del Zend Framework. Como no queremos utilizar todos los componentes de este framework, vamos a instalar solamente los componentes necesarios en el directorio lib/vendor/, el mismo en el que instalamos Symfony.

En primer lugar, descarga el Zend Framework y descomprime sus archivos en el directorio lib/vendor/Zend/.

Nota Las siguientes instrucciones se han probado con la versión 1.8.0 del Zend Framework.

A continuación, elimina todos los archivos y directorios salvo los siguientes, que son los que vamos a utilizar para enviar emails:

  • Exception.php
  • Loader/
  • Loader.php
  • Mail/
  • Mail.php
  • Mime/
  • Mime.php
  • Search/

Nota El directorio Search/ no lo necesitamos para enviar emails pero sí para el tutorial de mañana.

Después, añade el siguiente código en la clase ProjectConfiguration de tu proyecto para registrar el cargador automático de clases de Zend:

// config/ProjectConfiguration.class.php
class ProjectConfiguration extends sfProjectConfiguration
{
  static protected $zendLoaded = false;

  static public function registerZend()
  {
    if (self::$zendLoaded)
    {
      return;
    }

    set_include_path(sfConfig::get('sf_lib_dir').'/vendor'.PATH_SEPARATOR.get_include_path());
    require_once sfConfig::get('sf_lib_dir').'/vendor/Zend/Loader/Autoloader.php';
    Zend_Loader_Autoloader::getInstance();
    self::$zendLoaded = true;
  }

  // ...
}

16.5.2. Enviando emails

Modifica la acción activate para enviar un email cuando el administrador valida un afiliado:

// apps/backend/modules/affiliate/actions/actions.class.php
class affiliateActions extends autoAffiliateActions
{
  public function executeListActivate()
  {
    $affiliate = $this->getRoute()->getObject();
    $affiliate->activate();

    // send an email to the affiliate
    ProjectConfiguration::registerZend();
    $mail = new Zend_Mail();
    $mail->setBodyText(<<<EOF
Your Jobeet affiliate account has been activated.

Your token is {$affiliate->getToken()}.

The Jobeet Bot.
EOF
);
    $mail->setFrom('[email protected]', 'Jobeet Bot');
    $mail->addTo($affiliate->getEmail());
    $mail->setSubject('Jobeet affiliate token');
    $mail->send();

    $this->redirect('@jobeet_affiliate');
  }

  // ...
}

Para que el código anterior funcione correctamente, modifica [email protected] por una dirección de email válida.

Nota El sitio web del Zend Framework incluye un completo tutorial sobre la librería Zend_Mail.