Jump to content

Swift_Message_MimeException : problème de commande "fantôme", et mot de passe oublié


Recommended Posts

Bonjour,

 

Je n'ai trouvé aucune informations à propos de ce bug, alors je me permets de le poster, et de vous proposer une solution qui fonctionne.

 

Symptômes possibles :

- certains Emails de Contact, Mot de passe oublié ne sont jamais transmis

- lors de certaines commandes, avec le module mailalerts activé, on se retrouve avec des commandes "fantômes" (= non valides, sans aucun produits, ..).

 

 

Le problème vient de l'envoi d'email (de confirmation de nouvelle commande, ou d'envoi du nouveau mot de passe). En effet, le framework utilisé pour créer les Emails est Swift (visible dans le répertoire tools/Swift).

Or cette version est assez ancienne, et semble avoir un bug qui provoque l'interruption du traitement de nouvelles commandes ou d'envoi de mot de passe.

 

Voilà le type de message d'erreur que l'on peut trouver dans les logs :

Fatal error: Uncaught exception 'Swift_Message_MimeException' with message 'Something went wrong whilst trying to move some MIME parts during an attach(). The MIME component threw an exception:<br />Cannot remove child part identified by '5002049111081' as it does not exist. Consider using hasChild() to check.' in /www/tools/swift/Swift/Message.php:542 Stack trace: #0 /home/ovh/www/classes/Mail.php(194): Swift_Message->attach(Object(Swift_Message_Part)) #1 /home/ovh/www/modules/mailalerts/mailalerts.php(241): MailCore::Send(2, 'new_order', 'Nouvelle comman...', Array, Array, NULL, '[email protected]...', 'AGEOD.com', NULL, NULL, '/home/ovh/www/m...') #2 [internal function]: MailAlerts->hookNewOrder(Array) #3 /home/ovh/www/classes/Module.php(758): call_user_func(Array, Array) #4 /home/ovh/www/classes/Hook.php(136): ModuleCore::hookExec('newOrder', Array) #5 /home/ovh/www/classes/PaymentModule.php(426): HookCore::newOrder(Object(Cart), Object(Order), Object(Customer), Object(Currency), Object(OrderState)) #6 /home/ov in /home/ovh/www/tools/swift/Swift/Message.php on line 542

 

 

Dans la classe /tools/Swift/Swift/Message.php, dans la fonction "moveBranchIn" à la ligne 623, il faut rajouter un test if :

if($this->getReference("parent", $old_branch)->hasChild($id))
{
   $this->getReference("parent", $old_branch)->removeChild($id);
}

 

Si ça peut en aider certains :)

 

Bonne journée !

  • Like 5
Link to comment
Share on other sites

Effectivement depuis le 13 07 2012 ou 14 07 2012, j'ai un problème de commande fantôme quelque soit le mode de paiement utilisé.

 

Je vais tester ça tout de suite.

 

Pour ceux qui n'aurait pas compris, il faut remplacé le code de la ligne 639 suivant " $this->getReference("parent", $old_branch)->removeChild($id); " par:

 

 

/* Ajout du 18 07 2012 pour problemes de commande fantôme
  */
  if($this->getReference("parent", $old_branch)->hasChild($id))
{
   $this->getReference("parent", $old_branch)->removeChild($id);
}

  /** $this->getReference("parent", $old_branch)->removeChild($id);
  */

  • Like 1
Link to comment
Share on other sites

Depuis le fix, tout est de nouveau normal sur mes boutiques.

Ce que je n'ai pas réussi à comprendre pour le moment, c'est pourquoi ces problèmes ont commencé à apparaître il y a peu, sans avoir fait aucune mise à jour.

 

Il y a certainement un autre soucis sous-jacent.

Link to comment
Share on other sites

Bonjour,

 

J'ai rencontré le même problème durant le week end et tous le début de la semaine.

Cependant pas moyen de voir l'origine de l'erreur. De plus le problème est très aléatoire.

Je ne rencontre pas le problème sur toutes les commandes uniquement sur certaines.

 

Quelqu'un à t'il un début de piste ?

 

J'ai contacté mon hébergeur et aucune modification n'a été faite sur les SMTP.

Link to comment
Share on other sites

  • 5 weeks later...

Je rencontre actuellement le meme probleme sur un des sites Presta que j'ai, je vais donc utiliser votre code, merci!

 

Par contre, ce probleme ne m'est apparu que sur un site. Est-ce qu'il est suggere de mettre en place ce code pour tous les autres sites egalement par prevention? Ce sont des sites 1.4 et 1.3.

Edited by jojo2076 (see edit history)
Link to comment
Share on other sites

  • 1 month later...

Bonjour,

 

Merci pour votre solution.

Je voudrais juste être sur, mon code final donne cela :

 

	 if($this->getReference("parent", $old_branch)->hasChild($id))
{
   $this->getReference("parent", $old_branch)->removeChild($id);
}

 /**    $this->getReference("parent", $old_branch)->removeChild($id);
   } */
   $this->setReference("parent", $old_branch, $new); //parentRefs[$old_branch] = $new;
 }

 

 

Est-ce bon ?

 

Merci,

Bonne journée

Link to comment
Share on other sites

@Orga-nikz : à mon avis, tu as pris une accolade en trop dans le commentaire. Difficile de dire sans vision globale mais je dirais plutôt:

 

        if($this->getReference("parent", $old_branch)->hasChild($id))
{
   $this->getReference("parent", $old_branch)->removeChild($id);
}

 /**    $this->getReference("parent", $old_branch)->removeChild($id); **/
   }
   $this->setReference("parent", $old_branch, $new); //parentRefs[$old_branch] = $new;
 }

 

@Icedocemile : merci pour ce fix. J'espère ne plus avoir de commandes fantômes...

Link to comment
Share on other sites

  • 4 weeks later...
  • 1 month later...
  • 1 month later...

Près de 1 an et demi que je cherche un semblant de piste pour ce problème !! J'ai mis en place le FIX, je reviens vers vous si j'ai un problème !! En tout cas si plus de commande fantôme je vous serai éternellement reconnaissant (j'en fais peut-être un peu trop, mais je déprime un peu moins) !!

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 weeks later...
  • 2 weeks later...

Hello,

 

Possiblement mais je pense que les versions de swift doivent diverger quand même.

 

Merci pour cette réponse mais elle ne me "parle" pas trop, ça veut dire que le code indiqué risque de ne pas fonctionner sur ma version ? Je suis un peu désespérée, les commandes "fantômes" sont de plus en plus fréquentes !!!

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 year later...

bonjour je découvre cette ancien message et j ai le meme soucie j ai de plus en plus de commande fantome et j ai mis ce if mais etant assez novice pourriez vous me dire si cela est bon

merci 

 

        case "related": $this->getReference("related", $tag)->addChild($ref, $id, $sign);
          break;
        case "mixed": $this->getReference("mixed", $tag)->addChild($ref, $id, $sign);
          break;
      }
      if($this->getReference("parent", $old_branch)->removeChild($id);
    }
    $this->setReference("parent", $old_branch, $new); //parentRefs[$old_branch] = $new;
  }
  /**
   * Analyzes the mixing of MIME types in a mulitpart message an re-arranges if needed
   * It looks complicated and long winded but the concept is pretty simple, even if putting it
   * in code does me make want to cry!
   */
  protected function postAttachFixStructure()
  {
    switch (true)
 
je suis en 1.4.6.2
Link to comment
Share on other sites

Coucou

 

ça serai plutôt d'apres le post#3

ligne 623

remplacer
$this->getReference("parent", $old_branch)->removeChild($id);
par
if($this->getReference("parent", $old_branch)->hasChild($id))
{
$this->getReference("parent", $old_branch)->removeChild($id);
}

@++

 

Loulou66

Link to comment
Share on other sites

merci pour votre reponse donc sa donne cela

 

        case "related": $this->getReference("related", $tag)->addChild($ref, $id, $sign);
          break;
        case "mixed": $this->getReference("mixed", $tag)->addChild($ref, $id, $sign);
          break;
      }
      if($this->getReference("parent", $old_branch)->hasChild($id))
{
$this->getReference("parent", $old_branch)->removeChild($id);
}
    }
    $this->setReference("parent", $old_branch, $new); //parentRefs[$old_branch] = $new;
  }
  /**
 
 
 
 
par contre n ai je pas un  } en trop entre les lignes
merci
Link to comment
Share on other sites

  • 4 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...