IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres composants PHP Discussion :

[Zend_Mail] Tester la connexion


Sujet :

Autres composants PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de yosraisi
    Inscrit en
    Février 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 136
    Par défaut [Zend_Mail] Tester la connexion
    salut j'utilise zend mail pour envoyer des mail de mon application vers un serveur SMTP tous ça marche bien mais si mon serveur est fermé il y a cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to tcp://127.0.0.1:25 (Une tentative de connexion a échoué car le parti connecté n'a pas répondu convenablement au-delà d'une certaine durée ou une connexion établie a échoué car l'hôte de connexion n'a pas répondu. ) in D:\wamp\www\consultation\library\Zend\Mail\Protocol\Abstract.php on line 224
     
    Fatal error: Maximum execution time of 30 seconds exceeded in D:\wamp\www\consultation\library\Zend\Mail\Protocol\Abstract.php on line 224
    alors j'ai eu une aide de faire ce code dans un try catch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    try{
                                     $tr = new Zend_Mail_Transport_Smtp('127.0.0.1');
     
                                    Zend_Mail::setDefaultTransport($tr);
                                           $mail = new Zend_Mail();
                                        $mail->setBodyText('Consultation de  '.''.$descriptionconsult);
                                        $mail->setFrom($GLOBALS['$emailuser'], 'Demande: consultation de  '.$GLOBALS['$usernom'].'');
                                        $mail->addTo('admin@splt', 'Demande: consultation de  '.$GLOBALS['$usernom'].'');
                                        $mail->setSubject('consultation');
                                        $mail->send();
        $this->_redirect('/consultation/afficherconsultationbyid/num_consult/'.$this->view->consultation);    
     
     
                            }catch(Zend_Mail_Exception $e){
                            $this->_redirect('/consultation/afficherconsultationbyid/num_consult/'.$this->view->consultation);                     
                            }
    mais l'erreur reste en cours

    avez vous une solution s'il vous plais
    merci pour l'aide

  2. #2
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Par défaut
    Bonjour,
    Pas de solution magique non, mais par contre, je sais pourquoi ton erreur n'est pas rattrapée.
    Donc, la première, c'est un warning, donc pas une exception, donc try catch sert à rien, la seconde c'est pas une exception non plus, mais une erreur de php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Zend\Mail\Protocol\Abstract.php
    $this->_socket = stream_socket_client($remote, $errorNum, $errorStr, self::TIMEOUT_CONNECTION);
    Voila la ligne qui pose problème ! ton self :: TIMEOUT_CONNECTION vaut .. 30 secondes, max execution time aussi .. conclusion, il attends 30 secondes pour déclarer la connection en timeout, il sort de la, et hop php dit que c'est fini > <

    Conclusion : 3 solutions :
    changer le self::TIMEOUT_CONNECTION pour une valeur plus p'tite ( et la tu aura une Zend_Mail_Protocol_Exception lancée )
    changer le temps maxi d'execution de ton script ( même chose pour l'exception )
    ( Et dans ces 2 cas, rajoute un @ devant le streamblablabla, ou vire l'affichage des Warnings, le client verra rien comme ca, ensuite bah exactement ce que tu as déjà, rattrapage d'exception et hop )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try{
    [...]
    $mail -> send()
    }catch(Zend_Mail_Exception $e){ /* Puis comme ca si tu veux logger les down du serveur de mail, tu peux aussi :p */ }
    $this->_redirect('/consultation/afficherconsultationbyid/num_consult/'.$this->view->consultation);
    C'ra plus rapide à écrire en plus
    Et si tu veux faire générique, bah en faite tu peux pas XD ( à moins de refaire toutes les classes pour redéfinir le protocol ;_;

    En bref,
    Bonne chance !

  3. #3
    Membre confirmé Avatar de yosraisi
    Inscrit en
    Février 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 136
    Par défaut
    bonjour
    merci pour l'explication peux tu me dire d'où je peux changer le self::TIMEOUT_CONNECTION
    merci

  4. #4
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Par défaut
    Bonjour,
    alors : fichier : library\Zend\Mail\Protocol\Abstract.php (ligne 61 logiquement )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       /**
         * Default timeout in seconds for initiating session
         */
        const TIMEOUT_CONNECTION = 30;
    tu change le 30 par ce que tu veux. Si tu est sur de ton serveur de mail ( = il aura vraisemblablement jamais de gros lag ), 15 devrais suffir.
    Sinon, solution 2 : dans tes fonctions ou tu dois envoyer des mails, tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_time_limit( 1 * 60 ); // = 1 minute
    avec ca, tu as tout pour réussir

    Bonne chance

  5. #5
    Membre confirmé Avatar de yosraisi
    Inscrit en
    Février 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 136
    Par défaut
    merci pour l'aide c'est gentil
    ça marche maintenant j'ai changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     const TIMEOUT_CONNECTION = 15
    je crois même que je peux faire avec 10

    merci beaucoup c'est résolue

  6. #6
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Par défaut

    De rien.

    15 secondes pour un timeout, je trouve ca suffisant, tant que tu est sur de ta connexion ( sisi un lag de 15 secondes ca existe ! ), puis si t'a des soucis encore, essaye en augmentant le timeout avec set_time_limit, et en remettant le TIMEOUT_CONNECTION à 30

    Maintenant que tu as le principe de toute facon, règle ca à ta sauce, mais n'oublie pas, si tu met Zend à jour, ca va tout casser :/ Donc, met une note dans tes commentaires, pour les générations futures ( voir même pour toi, dans quelques années, quand tu aura oublié :p ).
    C'est en grande partie pour cela que c'est plus 'propre' de changer de time out de php, les librairies ZF devraient pouvoir être mises à jour sans casser ton appli ( c'est beau de rêver, hein ? )

    Bref, bonne continuation, et bons mails !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester la connexion d'un pc réseau local avec un ping
    Par Revan777 dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/10/2006, 11h40
  2. Tester la connexion
    Par wassim_kh dans le forum Réseau
    Réponses: 9
    Dernier message: 11/07/2006, 08h33
  3. Tester la connexion d'un PC
    Par iris44 dans le forum Windows
    Réponses: 15
    Dernier message: 03/02/2006, 20h09
  4. Tester la connexion à une base
    Par kaboume dans le forum ASP
    Réponses: 4
    Dernier message: 04/03/2005, 15h54
  5. comment tester la connexion depuis un fichier BATCH
    Par philippe_Aix dans le forum Oracle
    Réponses: 13
    Dernier message: 11/10/2004, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo