TigerZF
🌐Español

Capítulo 45. Zend_Mail

45.1. Introducción

45.1.1. Primeros pasos

Zend_Mail proporciona funcionalidad generalizada para componer y enviar mensajes de correo electrónico tanto de texto como multiparte compatibles con MIME. El correo se puede enviar con Zend_Mail mediante el transporte por defecto Zend_Mail_Transport_Sendmail o mediante Zend_Mail_Transport_Smtp.

Ejemplo 45.1. Correo electrónico simple con Zend_Mail

Un correo electrónico simple consiste en algunos destinatarios, un asunto, un cuerpo y un remitente. Para enviar dicho correo usando Zend_Mail_Transport_Sendmail, haga lo siguiente:

$mail = new Zend_Mail();
$mail->setBodyText('This is the text of the mail.');
$mail->setFrom('somebody@example.com', 'Some Sender');
$mail->addTo('somebody_else@example.com', 'Some Recipient');
$mail->setSubject('TestSubject');
$mail->send();

[Note] Definiciones mínimas

Para enviar un correo electrónico con Zend_Mail debe especificar al menos un destinatario, un remitente (por ejemplo, con setFrom()), y un cuerpo de mensaje (texto y/o HTML).

Para la mayoría de los atributos de correo existen métodos "get" para leer la información almacenada en el objeto mail. Para más detalles, consulte la documentación de la API. Uno especial es getRecipients(). Devuelve un array con todas las direcciones de correo electrónico de los destinatarios que se añadieron antes de la llamada al método.

Por motivos de seguridad, Zend_Mail filtra todos los campos de cabecera para evitar la inyección de cabeceras con caracteres de nueva línea (\n). Las comillas dobles se cambian a comillas simples y los corchetes angulares a corchetes cuadrados en el nombre del remitente y los destinatarios. Si las marcas están en la dirección de correo electrónico, las marcas se eliminarán.

También puede usar la mayoría de los métodos del objeto Zend_Mail con una cómoda interfaz fluida.

$mail = new Zend_Mail();
$mail->setBodyText('This is the text of the mail.')
    ->setFrom('somebody@example.com', 'Some Sender')
    ->addTo('somebody_else@example.com', 'Some Recipient')
    ->setSubject('TestSubject')
    ->send();

45.1.2. Configuración del transporte sendmail por defecto

El transporte por defecto para una instancia de Zend_Mail es Zend_Mail_Transport_Sendmail. Es esencialmente un envoltorio de la función mail() de PHP. Si desea pasar parámetros adicionales a la función mail(), simplemente cree una nueva instancia de transporte y pase sus parámetros al constructor. La nueva instancia de transporte puede entonces actuar como el transporte por defecto de Zend_Mail, o se puede pasar al método send() de Zend_Mail.

Ejemplo 45.2. Paso de parámetros adicionales al transporte Zend_Mail_Transport_Sendmail

Este ejemplo muestra cómo cambiar el Return-Path de la función mail().

$tr = new Zend_Mail_Transport_Sendmail('-freturn_to_me@example.com');
Zend_Mail::setDefaultTransport($tr);

$mail = new Zend_Mail();
$mail->setBodyText('This is the text of the mail.');
$mail->setFrom('somebody@example.com', 'Some Sender');
$mail->addTo('somebody_else@example.com', 'Some Recipient');
$mail->setSubject('TestSubject');
$mail->send();

[Note] Restricciones del modo seguro

Los parámetros adicionales opcionales harán que la función mail() falle si PHP se está ejecutando en modo seguro.

[Warning] Transporte Sendmail y Windows

Como indica el manual de PHP, la función mail() tiene un comportamiento diferente en Windows y en sistemas basados en *nix. Usar el Transporte Sendmail en Windows no funcionará en combinación con addBcc(). La función mail() enviará al destinatario en BCC de tal forma que todos los demás destinatarios podrán verlo como destinatario.

Por lo tanto, si desea usar BCC en un servidor Windows, ¡use el transporte SMTP para el envío!