Programmer's Reference Guide

Envoyer des courriels en utilisant SMTP

Envoyer plusieurs courriels par connexion SMTP

Par défaut un transport SMTP unique crée une connexion unique et la réutilise pour toute la durée de la vie du script. Vous pouvez envoyer plusieurs courriels à travers cette connexion SMTP. Une commande RSET doit être envoyée avant chaque distribution pour garantir que le dialogue SMTP correct est respecté.

Optionally, you can also define a default From email address and name, as well as a default reply-to header. This can be done through the static methods setDefaultFrom() and setDefaultReplyTo(). These defaults will be used when you don't specify a From/Reply-to Address or -Name until the defaults are reset (cleared). Resetting the defaults can be done through the use of the clearDefaultFrom() and clearDefaultReplyTo.

Exemple #1 Envoyer plusieurs courriels par connexion SMTP

  1. // Créer un transport
  2. $config = array('name' => 'sender.example.com');
  3. $transport = new Zend_Mail_Transport_Smtp('mail.example.com', $config);
  4.  
  5. // Ajouter les nom et adresses "From" & "Reply-To" pour tous les courriels
  6. // à envoyer
  7. Zend_Mail::setDefaultFrom('sender@example.com', 'John Doe');
  8. Zend_Mail::setDefaultReplyTo('replyto@example.com','Jane Doe');
  9.  
  10. // Boucle à travers les messages
  11. for ($i = 0; $i < 5; $i++) {
  12.     $mail = new Zend_Mail();
  13.     $mail->addTo('studio@example.com', 'Test');
  14.     $mail->setSubject(
  15.         'Démonstration - Envoyer plusieurs emails par connexion SMTP'
  16.     );
  17.     $mail->setBodyText('...Votre message ici...');
  18.     $mail->send($transport);
  19. }
  20.  
  21. // Effacer les valeurs par défaut
  22. Zend_Mail::clearDefaultFrom();
  23. Zend_Mail::clearDefaultReplyTo();

Si vous voulez avoir une connexion SMTP séparée pour chaque distribution de courriel, vous devez créer et détruire votre transport avant et après chaque appel de la méthode send(). Ou sinon, vous pouvez manipuler la connexion entre chaque distribution en accédant à l'objet de protocole de transport.

Exemple #2 Contrôler manuellement la connexion de transport

  1. // Créer un transport
  2. $transport = new Zend_Mail_Transport_Smtp();
  3.  
  4. $protocol = new Zend_Mail_Protocol_Smtp('mail.example.com');
  5. $protocol->connect();
  6. $protocol->helo('sender.example.com');
  7.  
  8. $transport->setConnection($protocol);
  9.  
  10. // Boucle à travers les messages
  11. for ($i = 0; $i < 5; $i++) {
  12.     $mail = new Zend_Mail();
  13.     $mail->addTo('studio@example.com', 'Test');
  14.     $mail->setFrom('studio@example.com', 'Test');
  15.     $mail->setSubject(
  16.         'Démonstration - Envoyer plusieurs emails par connexion SMTP'
  17.     );
  18.     $mail->setBodyText('...Votre message ici...');
  19.  
  20.     // Contrôler manuellement la connexion
  21.     $protocol->rset();
  22.     $mail->send($transport);
  23. }
  24.  
  25. $protocol->quit();
  26. $protocol->disconnect();

Envoyer des courriels en utilisant SMTP

Comments

obeject for the Zend_Mail should be created before starting the for loop
Why?

For my opinion if we create object before the loop so for the each new message will be added new address.

more:
http://framework.zend.com/manual/en/zend.mail.adding-recipients.html
Please if you are planning on using SMTP for mailing use the following option while setting up your Zend_Mail_Transport_Smtp . Save yourself the 3hours of headache.

SPECIFY [b]'auth' => 'login'[/b] in the config options


$config = array(
                'auth' => 'login',
                'username' => $username,
                'password' => $password);

+ Add A Comment

Please do not report issues via comments; use the ZF Issue Tracker.

If you have a JIRA/Crowd account, we suggest you login first before commenting.

  • BBCode is allowed in the comment markup

  • Select a Version

    Languages Available

    Components

    Search the Manual