Jump to content
Icedocemile

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, 'contact@ageod.c...', '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

Share this post


Link to post
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

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites

Hello,

 

Je pense à une mise à jour des smtp d'OVH ce week end, par ce que j'ai eu les memes logs sur des 1.2, des 1.3 et des 1.4.

 

Merci encore d'avoir posté pour les autres !!!

Share this post


Link to post
Share on other sites

Merci beaucoup Icedocemile pour la solution que tu nous as données!

 

Plus de soucis depuis 12 heures.

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites

Si tu es en hébergement mutualisé, tu devrais demander les logs d'erreurs à ton hébergeur. Ensuite tu pourras les fouiller pour essayer de trouver l'erreur qui se produit.

Share this post


Link to post
Share on other sites

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)

Share this post


Link to post
Share on other sites

Superbe !

Quelle chance de trouver ce patch. La communauté prestashop est fantastique.

Pour ceux qui veulent en savoir un peu plus et qui ne seraient pas déjà allés voir sur le bugtracker :

http://forge.prestashop.com/browse/PSCFI-6121

 

Have a nice day, men !

Big Up ICEDOCEMILE !

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
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...

Share this post


Link to post
Share on other sites

Salut à tous

Merci pour le fix, j'ai des commandes paypal qui ne remontaient plus (qui étaient insvisibles et en "annulées alors que le paiement était reçu). je teste et je reviens vers vous pour vous dire si c'est OK (PS1.4.6.2)

A bientôt !

Lionel

Share this post


Link to post
Share on other sites

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) !!

Share this post


Link to post
Share on other sites

Depuis le 25 Fev aucune commande de perdue... ça à l'air de fonctionner à merveille !! Merci encore!

Share this post


Link to post
Share on other sites

Est-ce que cette solution s'applique aussi à la version 1.3.5 ?

Share this post


Link to post
Share on other sites

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 !!!

Share this post


Link to post
Share on other sites

Hello,

 

Essayez de l'appliquer mais cela peut ne pas marcher oui. Si le site envoie toujours des mails après modifications, et qu'il y a toujours des commandes perdues, il faut chercher une autre raison, du coté du moyen de paiement par exemple.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
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

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

bonjour rencontrant le meme soucis sur presta 1.6.08 cette ligne de code serait elle fonctionnelle

Serge

Share this post


Link to post
Share on other sites

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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More