4.2. Enviando emails desde una acción

Obtener la instancia del objeto mailer en una acción es muy sencillo gracias al atajo getMailer():

$mailer = $this->getMailer();

4.2.1. La forma más rápida

Enviar un email es tan sencillo como utilizar el método sfAction::composeAndSend():

$this->getMailer()->composeAndSend(
  'remitente@ejemplo.com',
  'fabien@ejemplo.com',
  'Asunto',
  'Cuerpo'
);

El método composeAndSend() utiliza cuatro argumentos:

  • La dirección desde la que se envía el email (campo from)
  • La dirección o direcciones a las que se envía el email (campo to)
  • El asunto del mensaje
  • El cuerpo o contenido del mensaje

Siempre que un método utilice una dirección de email como argumento, se puede indicar como cadena de texto o como array:

$direccion = 'fabien@ejemplo.com';
$direccion = array('fabien@ejemplo.com' => 'Fabien Potencier');

Obviamente puedes enviar un mismo email a varios destinatarios pasando como segundo argumento del método un array con todas las direcciones de email:

$para = array(
  'destinatario1@ejemplo.com',
  'destinatario2@ejemplo.com',
);
$this->getMailer()->composeAndSend('remitente@ejemplo.com', $para, 'Asunto', 'Cuerpo');
 
$para = array(
  'destinatario1@ejemplo.com' => 'Sr. Destinatario',
  'destinatario2@ejemplo.com' => 'Sra. Destinataria',
);
$this->getMailer()->composeAndSend('remitente@ejemplo.com', $para, 'Asunto', 'Cuerpo');

4.2.2. La forma flexible

Si necesitas más flexibilidad, puedes hacer uso del método sfAction::compose() para crear un mensaje, personalizarlo de la forma que quieras y enviarlo después. Esta forma es útil por ejemplo cuando quieres añadir un adjunto en el email como se muestra a continuación:

// crear un objeto de tipo mensaje
$mensaje = $this->getMailer()
  ->compose('remitente@ejemplo.com', 'fabien@ejemplo.com', 'Asunto', 'Cuerpo')
  ->attach(Swift_Attachment::fromPath('/ruta/hasta/el/archivo.zip'))
;
 
// enviar el mensaje
$this->getMailer()->send($mensaje);

4.2.3. La forma más completa

Si necesitas aún más flexibilidad, puedes crear directamente el objeto del mensaje:

$mensaje = Swift_Message::newInstance()
  ->setFrom('remitente@ejemplo.com')
  ->setTo('destinatario@ejemplo.com')
  ->setSubject('Asunto')
  ->setBody('Cuerpo')
  ->attach(Swift_Attachment::fromPath('/ruta/hasta/el/archivo.zip'))
;
 
$this->getMailer()->send($mensaje);

Nota Si quieres saberlo todo sobre cómo crear mensajes, puedes leer las secciones "Creando mensajes" y "Cabeceras de los mensajes" de la documentación oficial de Swift Mailer.

Compartir

Indice de contenidos