Más con Symfony

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(
  '[email protected]',
  '[email protected]',
  '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 = '[email protected]';
$direccion = array('[email protected]' => '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(
  '[email protected]',
  '[email protected]',
);
$this->getMailer()->composeAndSend('[email protected]', $para, 'Asunto', 'Cuerpo');

$para = array(
  '[email protected]' => 'Sr. Destinatario',
  '[email protected]' => 'Sra. Destinataria',
);
$this->getMailer()->composeAndSend('[email protected]', $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('[email protected]', '[email protected]', '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('[email protected]')
  ->setTo('[email protected]')
  ->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.