Annonce

#1 2006-10-25 23:43:48

DomZ
Membre
Inscription : 2005-12-20
Messages : 20

Re : Utilisation de la variable SEND_PACKET ...

Salut,

La variable "SEND_PACKET" est utilisée pour envoyé un certain nombre d'email par envoi, voir contrib\wanewsletter (ligne 201).

//
// Nombre d'envois maximum à effectuer lors d'un flot d'envois
//
else if( preg_match('/^-(?:-packet=|k)(\d+)$/', $argv[$i], $match) )
{
    $send_packet = $match[1];
}

J'aimerais comprendre comment est utilisée la variable SEND_PACKET, notamment dans engine_send.php.

Cette variable est utilisée qu'une seule fois dans le fichier engine_send.php (ligne 563).

if( SEND_DELAY > 0 && ($counter % SEND_PACKET) == 0 )
{
    sleep(SEND_DELAY);
}

Mais je ne comprends pas comment le fait de faire un sleep permet de gérer un certain nombre d'email par envoi ...

D'autre part que se passe t-il si l'on utilise SEND_PACKET sans SEND_DELAY, apriori les variables n'ont pas de relation entre elles ?

Bobe peux-tu m'expliquer, je pense qu'il manque quelquechose dans le code.

Ne devrait-on pas plutot faire :

if(SEND_DELAY > 0)
{
    sleep(SEND_DELAY);
}

if(($counter % SEND_PACKET) == 0)
{
    $mailer->smtp->quit(); //L'envoi se fait quand on ferme la connexion, une connexion est ré-ouverte automatiquement au prochain flot d'email
}

Merci

Hors ligne

#2 2006-10-26 00:27:28

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : Utilisation de la variable SEND_PACKET ...

Mais je ne comprends pas comment le fait de faire un sleep permet de gérer un certain nombre d'email par envoi ...

Le but est de faire une pause durant l'envoi pour ne pas engorger le serveur de mail, et surtout ne pas passer pour un spameur.

SEND_DELAY est le nombre de secondes que devra durer la pause.
SED_PACKET est le nombre d'emails que l'on peut envoyer avant de faire chaque pause.

D'autre part que se passe t-il si l'on utilise SEND_PACKET sans SEND_DELAY, apriori les variables n'ont pas de relation entre elles ?

Bobe peux-tu m'expliquer, je pense qu'il manque quelquechose dans le code.

Ne devrait-on pas plutot faire :

if(SEND_DELAY > 0)
{
    sleep(SEND_DELAY);
}

if(($counter % SEND_PACKET) == 0)
{
    $mailer->smtp->quit(); //L'envoi se fait quand on ferme la connexion, une connexion est ré-ouverte automatiquement au prochain flot d'email
}

Merci

Non. Là, tu ferais une pause entre chaque envoi d'email.


PHP et MySQL, un duo gagnant !

Hors ligne

#3 2006-10-26 00:34:01

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : Utilisation de la variable SEND_PACKET ...

Ceci dit, tu soulèves un point intéressant.
Quand j'ai ajouté ce code. Je suis parti du principe qu'on utilisait la fonction mail() de php. Et donc que php se débrouillerait derrière pour contacter le serveur smtp à chaque envoi d'email (windows) ou passerait les données à sendmail ou équivalent (linux & autres) qui ferait les choses bien mieux que moi pour gérer ce flot d'email et contacter les serveurs smtp qu'il faut.

Je n'avais pas pensé au cas où on on passe directement par un serveur SMTP. Il serait effectivement bien mieux de faire un $mailer->smtp->quit() à chaque pause, pour valider auprès du serveur SMTP les envois précédents, et laisser la classe mailer relançait automatiquement la connexion au serveur SMTP.


PHP et MySQL, un duo gagnant !

Hors ligne

#4 2006-10-26 00:39:37

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : Utilisation de la variable SEND_PACKET ...

Bon bah j'ai rien dit. La connexion au serveur SMTP ne reste ouverte après chaque envoi que si $persistent_connection est à true dans la classe Mailer et il est à false par défaut.


PHP et MySQL, un duo gagnant !

Hors ligne

#5 2006-10-26 11:20:22

DomZ
Membre
Inscription : 2005-12-20
Messages : 20

Re : Utilisation de la variable SEND_PACKET ...

...
Il serait effectivement bien mieux de faire un $mailer->smtp->quit() à chaque pause, pour valider auprès du serveur SMTP les envois précédents, et laisser la classe mailer relançait automatiquement la connexion au serveur SMTP.

En fait à la base c'est pour çà que je pose la question car dans mon cas avec un persistent_connexion = true, les mails s'empilent indéfiniment donc si j'ai 5000 emails à envoyer il me fait un flot de 5000 emails.

Ce que évidement le server smtp refuse ...

Comment tu gérerais cette situation ?

Merci

Hors ligne

#6 2006-10-26 22:30:20

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : Utilisation de la variable SEND_PACKET ...

Alors fais:

if( SEND_DELAY > 0 && ($counter % SEND_PACKET) == 0 )
{
    $mailer->smtp->quit(); //L'envoi se fait quand on ferme la connexion, une connexion est ré-ouverte automatiquement au prochain flot d'email 
    sleep(SEND_DELAY);
}

PHP et MySQL, un duo gagnant !

Hors ligne

Pied de page des forums