TigerZF
🌐Español

45.3. Envío de múltiples correos por conexión SMTP

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();