Por defecto, un único transporte SMTP crea una única conexión y la reutiliza durante toda la ejecución del script. Puede enviar múltiples correos electrónicos a través de esta conexión SMTP. Se emite un comando RSET antes de cada entrega para asegurar que se sigue el protocolo de negociación (handshake) SMTP correcto.
Opcionalmente, también puede definir una dirección y nombre From por defecto,
así como una cabecera reply-to por defecto. Esto puede hacerse mediante los
métodos estáticos setDefaultFrom() y
setDefaultReplyTo(). Estos valores por defecto se usarán cuando
no especifique una dirección/nombre From o Reply-to hasta que se restablezcan (limpien) los valores por defecto.
Restablecer los valores por defecto puede hacerse mediante el uso de
clearDefaultFrom() y
clearDefaultReplyTo.
Ejemplo 45.4. Envío de múltiples correos por conexión SMTP
// Create transport
$config = array('name' => 'sender.example.com');
$transport = new Zend_Mail_Transport_Smtp('mail.example.com', $config);
// Set From & Reply-To address and name for all emails to send.
Zend_Mail::setDefaultFrom('sender@example.com', 'John Doe');
Zend_Mail::setDefaultReplyTo('replyto@example.com','Jane Doe');
// Loop through messages
for ($i = 0; $i < 5; $i++) {
$mail = new Zend_Mail();
$mail->addTo('studio@example.com', 'Test');
$mail->setSubject(
'Demonstration - Sending Multiple Mails per SMTP Connection'
);
$mail->setBodyText('...Your message here...');
$mail->send($transport);
}
// Reset defaults
Zend_Mail::clearDefaultFrom();
Zend_Mail::clearDefaultReplyTo();
Si desea tener una conexión separada para cada envío de
correo, tendrá que crear y destruir su transporte antes y
después de cada llamada al método send(). O, alternativamente,
puede manipular la conexión entre cada entrega accediendo al
objeto de protocolo del transporte.
Ejemplo 45.5. Control manual de la conexión de transporte
// Create transport
$transport = new Zend_Mail_Transport_Smtp();
$protocol = new Zend_Mail_Protocol_Smtp('mail.example.com');
$protocol->connect();
$protocol->helo('sender.example.com');
$transport->setConnection($protocol);
// Loop through messages
for ($i = 0; $i < 5; $i++) {
$mail = new Zend_Mail();
$mail->addTo('studio@example.com', 'Test');
$mail->setFrom('studio@example.com', 'Test');
$mail->setSubject(
'Demonstration - Sending Multiple Mails per SMTP Connection'
);
$mail->setBodyText('...Your message here...');
// Manually control the connection
$protocol->rset();
$mail->send($transport);
}
$protocol->quit();
$protocol->disconnect();