Annonce

#1 2006-07-19 18:38:13

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

Re : Relancer une connexion SMTP

Bonjour,

J'utilise la dernière version de waMailer (2.4) en attendant waMailer 3.0 :d

Cependant j'ai un soucis avec une connexion ouverte avec persistent_connexion=true.

En effet apres un certains nombre d'email envoyés la connexion se ferme et le reste des emails n'est donc pas envoyé.

Donc j'aimerais savoir comment je dois relancer la connexion SMTP.

J'ai pensé au code ci-dessous, mais je suis pas sur que la connexion soit effectuée avec le use_smtp.

if(!$mailer->send()) {
  $mailer->use_smtp($smtp_host_auth, $smtp_port, $smtp_user, $smtp_pass);
  $mailer->send();
}

Merci

Hors ligne

#2 2006-07-19 21:08:21

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

Re : Relancer une connexion SMTP

J'utilise la dernière version de waMailer (2.4) en attendant waMailer 3.0 :d

La 3.0 est à peu près utilisable (je l'utilise sans soucis sur plusieurs sites).
Il me reste à clarifier la façon de gérer les erreurs (plutôt des déclenchements d'erreurs php ou plutôt lancer des exceptions...).
Et des ajustements par ci par là, notamment sur la partie… SMTP.
D'ailleurs, j'hésite un peu à la laisser, est-ce vraiment utile finalement…
Pourquoi l'utilises-tu tiens ?
Ah, et je sais pas encore comment remettre, et si je vais le faire, le système de modèles et tags (= ça vaut peut-être plus le coup de passer par un système de templates externe).

Cependant j'ai un soucis avec une connexion ouverte avec persistent_connexion=true.

En effet apres un certains nombre d'email envoyés la connexion se ferme et le reste des emails n'est donc pas envoyé.

Donc j'aimerais savoir comment je dois relancer la connexion SMTP.

Bizzare, normalement, c'est fait automatiquement par le script  neutral (ligne 1782 environ):

if( !is_resource($this->smtp->connect_id) || !$this->smtp->noop() )
{
    if( !$this->smtp->connect() )
    {
        $this->error($this->smtp->msg_error);
        return false;
    }
}

P.S: Inutile de diffuser ton message sur plusieurs sujets (cf annonce de publication de wamailer 2.4).


PHP et MySQL, un duo gagnant !

Hors ligne

#3 2006-07-20 10:09:05

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

Re : Relancer une connexion SMTP

P.S: Inutile de diffuser ton message sur plusieurs sujets (cf annonce de publication de wamailer 2.4).

En fait je me suis planté, j'aurais pas du mettre le pb dans annonce publication de wamailer 2.4 ...

Je confirme le probleme de re-connexion automatique, ce matin j'ai tjs 780 envoyés et les 183 derniers en echecs sad

Bobe comment je peux refaire la re-connexion, est ce que le code donné dans mon premier post suffirait ?

Merci

PS :
En fait ce qui serait bien pour les templates, c'est que au lieu d'utiliser des fichiers on puisse utiliser des variables (ou des fichiers stockés en variable PHP), car si l'on fait de l'emailing personnalisé (avec Bonjour %prenom% %nom%) par exemple. J'imagine qu'il va cherche le fichier à chaque fois, donc si on a 1 000 mails à envoyés, il va le chercher 1 000 fois ...

j'utilise la lib dans tous les envois d'email du site http://www.rapidemploi.com smile

PS2:
J'ai ajouté des infos de debug en plus, donc demain je pourrais t'en dire plus.

            if(!is_resource($mailer->smtp->connect_id) || !$mailer->smtp->noop()) {
                echo("La ressource n'existe plus\r\n");
                if(!$mailer->smtp->connect()) {
                    //$mailer->error($mailer->smtp->msg_error); 
                    echo("La re-connexion à échouée\r\n");
                }
            }

PS3 :
J'ai aussi remarqué sur sur d'autre envoi d'email ou je n'avais pas mis persistent_connexion=true, il reutilisait la connexion sans problème.
Donc :
- soit la connexion est réouverte automatiquement (donc le persistent_connexion perds de son interet)
- soit la connexion n'est pas fermée apres l'envoi de l'email

PS4 :
A quoi servent les headers :
X-Mailer et X-AntiAbuse ?

Hors ligne

#4 2006-07-21 09:28:22

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

Re : Relancer une connexion SMTP

Alors en fait pour les emails non envoyés j'ai l'erreur suivante :

send_data() :: 451 mail per session limit reached

De plus j'ai activé le log :
Et j'ai remarqué un truc bizarre, mais peut etre volontaire :

le charset est encadré par des " dans le part HTML mais pas dans le part TXT :

----=_Part2_5ac5b6c7ef21d21b184df2a19f160114
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

----=_Part2_5ac5b6c7ef21d21b184df2a19f160114
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Il serait peut-etre bien d'utiliser une fonction de compression HTML pour le template HTML (çà reduirait fortement le poids du mail), qu'en penses-tu ? (de mémoire il faut supprimer entre autre les espaces et tabulations entres les balises (pas à l'intérieur des balises)

Hors ligne

#5 2006-07-27 13:30:25

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

Re : Relancer une connexion SMTP

Alors en fait pour les emails non envoyés j'ai l'erreur suivante :

send_data() :: 451 mail per session limit reached

Je ne connais pas cette erreur  neutral
Cela semble vouloir dire qu'il y a une limite d'emails qu'on peut envoyer dans une session (mais qu'entend t-il par "session" ?).

Et j'ai remarqué un truc bizarre, mais peut etre volontaire :
le charset est encadré par des " dans le part HTML mais pas dans le part

Oui, c'est généré de cette façon par la classe. Non volontaire mais aucune incidence.

Il serait peut-etre bien d'utiliser une fonction de compression HTML pour le template HTML (çà reduirait fortement le poids du mail), qu'en penses-tu ? (de mémoire il faut supprimer entre autre les espaces et tabulations entres les balises (pas à l'intérieur des balises)

C'est une idée.
Par contre, conceptuellement, ce n'est pas à la classe mailer de faire cela. Ça doit être fait avant de passer le code html à la classe via la méthode set_message(). Enfin, de mon point de vue…

Cette fonction devrait donner un début de bon résultat:

function compressHTML($str)
{
    $str = preg_replace("#<([^>]+)>\s+#", "<\\1>", $str);
    $str = preg_replace("#\s+</([^>]+)>#", "</\\1>", $str);

    return $str;
}

PHP et MySQL, un duo gagnant !

Hors ligne

#6 2006-07-27 14:52:22

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

Re : Relancer une connexion SMTP

Alors en fait pour les emails non envoyés j'ai l'erreur suivante :

send_data() :: 451 mail per session limit reached

Je ne connais pas cette erreur  neutral
Cela semble vouloir dire qu'il y a une limite d'emails qu'on peut envoyer dans une session (mais qu'entend t-il par "session" ?).

Une session commence à louverture de la connexion SMTP et se termine lorsque l'on ferme cette connexion. Donc oui il s'agit bien d'une limitation (attention : je pense qu'il s'agit d'un timeout de session et pas une limite du nombre d'email, car sur plusieurs jours le nombre d'email envoyés était différent d'un jour à l'autre).

Par contre après quelques recherche sur Google, j'ai l'impression que l'erreur 451 est un peu une erreur générique. Donc pas facile à gérer ...

Le mieux serait peut etre de gérer un nombre d'envoi limite par session (une variable de la classe ?) et quand cette valeur est atteint la classe termine la session et en ouvre une autre automatiquement.

Peutx-tu me donner le code pour relancer une connexion (et juste la connexion) ?

C'est une idée.
Par contre, conceptuellement, ce n'est pas à la classe mailer de faire cela. Ça doit être fait avant de passer le code html à la classe via la méthode set_message(). Enfin, de mon point de vue…

Cette fonction devrait donner un début de bon résultat:

function compressHTML($str)
{
    $str = preg_replace("#<([^>]+)>\s+#", "<\\1>", $str);
    $str = preg_replace("#\s+</([^>]+)>#", "</\\1>", $str);

    return $str;
}

Ok je viens de voir que les fonctions set_message et set_altmessage pouvaient prendre en charge les tags ^^, nickel !
Merci pour la fonction smile

Hors ligne

#7 2006-07-27 15:30:18

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

Re : Relancer une connexion SMTP

Une session commence à louverture de la connexion SMTP et se termine lorsque l'on ferme cette connexion. Donc oui il s'agit bien d'une limitation (attention : je pense qu'il s'agit d'un timeout de session et pas une limite du nombre d'email, car sur plusieurs jours le nombre d'email envoyés était différent d'un jour à l'autre).

Par contre après quelques recherche sur Google, j'ai l'impression que l'erreur 451 est un peu une erreur générique. Donc pas facile à gérer ...

Le mieux serait peut etre de gérer un nombre d'envoi limite par session (une variable de la classe ?) et quand cette valeur est atteint la classe termine la session et en ouvre une autre automatiquement.

Mais tu dis plus haut qu'il ne s'agit pas de limitation sur le nombre d'envoi mais sur la durée de la session (bien que les deux soient liés).
Ça doit être géré en dehors de la classe.
La classe wamailer n'a qu'un but qui est d'envoyer un email, pas de gérer l'envoi en boucle de plusieurs emails, quoiqu'elle le facilite un peu (persistent_connexion, …).

Peutx-tu me donner le code pour relancer une connexion (et juste la connexion) ?

Celui de ton premier message devrait convenir (si les variables utilisées sont bien initialisées bien sûr).

Ou bien $mailer->smtp->connect();

PS: Concernant l'utilisation d'un fichier template, celui-ci n'est lu qu'une fois au début du premier envoi. Lors des envois suivants avec la même instance de wamailer, le code est réutilisé.

PS2: X-Mailer identifie le logiciel à l'origine de l'envoi de l'email.
X-AntiAbuse founit quelques informations l'hôte et IP d'où provient l'email. (en fait, ce nom est stupide, j'aurais dù mettre X-Abuse. Confusion de termes "Anti-spam" et "Abuse" qui a donné ce résultat à l'époque… :oops: )


PHP et MySQL, un duo gagnant !

Hors ligne

#8 2006-07-27 18:21:10

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

Re : Relancer une connexion SMTP

Mais tu dis plus haut qu'il ne s'agit pas de limitation sur le nombre d'envoi mais sur la durée de la session (bien que les deux soient liés).
Ça doit être géré en dehors de la classe.
La classe wamailer n'a qu'un but qui est d'envoyer un email, pas de gérer l'envoi en boucle de plusieurs emails, quoiqu'elle le facilite un peu (persistent_connexion, …).

Le persistent_connexion ne sert a rien puisqu'il n'est pas fiable (cf l'erreur 451). Je peux bien sur gérer le compteur en dehors de la classe mais bon c'est dommage (car çà fait de la duplication de code pour chaque envoi de mail), fonctionnellement çà aurait un sens d'avoir une variable $nb_email_par_lot. D'ailleurs si tu ne souhaite pas le faire, je surchargerais la méthode send de ta classe car pour moi c'est la classe qui doit gérer çà. smile

Hors ligne

Pied de page des forums