Probleme envoie email avec plxMyShop
J'utilise le plugin plxMyShop depuis quelque temps sur mon site et tout marchait tres bien
Sauf que ce soir un de mes client m'a fait remarque que lors de la validation de la commande il recoit un gros message d'erreurs:
En cherchant un peu avec le debugger de Firefox je peux voir qu'au moment de valider la commande apres avoir entrer tout les champs obligatoire je me retrouve avec cette erreur dans le fichier panier.php
Voici le contenu de la ligne 202 dans la source html
et ce qui cree cette ligne dans le fichier panier.php
Donc il manquerait un point virgule mais ou? et pourquoi a t'il disparu soudainement?
Et aussi par quel magie l'email est-il remplace par un eval?
Merci d'avance car la je suis coince!
Sauf que ce soir un de mes client m'a fait remarque que lors de la validation de la commande il recoit un gros message d'erreurs:
[== Indéfini ==]
Your basket Total (delivery cost included)£0.00
An error occured during the sending of your order email.
"; labelMailCart.style.display='inline-block'; firstnameCart.style.display='inline-block'; firstnameCart.value="Philippe"; labelFirstnameCart.style.display='inline-block'; lastnameCart.style.display='inline-block'; lastnameCart.value="Le Toquin"; labelLastnameCart.style.display='inline-block'; adressCart.style.display='inline-block'; adressCart.value="High View"; labelAddrCart.style.display='inline-block'; postcodeCart.style.display='inline-block'; postcodeCart.value="TF9 3QY"; labelPostcodeCart.style.display='inline-block'; cityCart.style.display='inline-block'; cityCart.value="Market Drayton"; labelCityCart.style.display='inline-block'; countryCart.style.display='inline-block'; countryCart.value="United Kingdom"; labelCountryCart.style.display='inline-block'; telCart.style.display='inline-block'; telCart.value="01630695825"; labelTelCart.style.display='inline-block'; idSuite.value="8"; numCart.value="8"; nprod=8; realnprod=8; tmpship=0; total=10.7; if (total >0) displayTotal=(total+0); else displayTotal=0; pos_devise= "before"; devise= "£"; if (pos_devise == "before") { price= devise+displayTotal.toFixed(2);} else { price= displayTotal.toFixed(2)+devise;} totalCart.innerHTML="Total (delivery cost included) : "+price; if (pos_devise == "before") { price= devise+"0";} else { price= "0"+devise;} spanshipping.innerHTML="
Delivery cost : " + price + " for 0.21 kg
"; totalcommand.value=total; } function changePaymentMethod(method) { if (method=="cheque")formCart.action="#panier"; else if (method=="cash") formCart.action="#panier"; else if (method=="paypal") formCart.action="#panier"; } function shippingMethod(kg, op){ if (op==1)totalkg=(parseFloat(totalkg.toFixed(3))+parseFloat(kg)); if (op==0)totalkg=(parseFloat(totalkg.toFixed(3))-parseFloat(kg)); accurecept=0; if (totalkg.toFixed(3)<=0.000) { shippingPrice=0.00; } else if (totalkg.toFixed(3)<=0) { shippingPrice=0+accurecept; } else if (totalkg.toFixed(3)<=0) { shippingPrice=0+accurecept; } else if (totalkg.toFixed(3)<=0) { shippingPrice=0+accurecept; } else if (totalkg.toFixed(3)<=0) { shippingPrice=0+accurecept; } else if (totalkg.toFixed(3)<=0) { shippingPrice=0+accurecept; } else if (totalkg.toFixed(3)<=0) { shippingPrice=0+accurecept; } else if (totalkg.toFixed(3)<=0) { shippingPrice=0+accurecept; } else if (totalkg.toFixed(3)<=0) { shippingPrice=0+accurecept; } else if (totalkg.toFixed(3)<=0) { shippingPrice=0+accurecept; } else if (totalkg.toFixed(3)<=0) { shippingPrice=0+accurecept; } else if (totalkg.toFixed(3)<=0) { shippingPrice=0+accurecept; } return shippingPrice; }
En cherchant un peu avec le debugger de Firefox je peux voir qu'au moment de valider la commande apres avoir entrer tout les champs obligatoire je me retrouve avec cette erreur dans le fichier panier.php
[== Indéfini ==]
SyntaxError: missing ; before statement panier:202:34
Voici le contenu de la ligne 202 dans la source html
[== JavaScript ==]
mailCart.value="<script type="text/javascript">eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%61%61%61%40%62%62%62%2e%63%63%63%27%29'))</script>";
et ce qui cree cette ligne dans le fichier panier.php
[== JavaScript ==]
mailCart.value="<?php echo (isset($_POST['email'])?$_POST['email']:''); ?>";
Donc il manquerait un point virgule mais ou? et pourquoi a t'il disparu soudainement?
Et aussi par quel magie l'email est-il remplace par un eval?
Merci d'avance car la je suis coince!
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Le coup du eval, ça sent le plugin qui protège les adresses emails pour eviter les robots de les recupérer.
Aurais-tu installé un plugin dernièrement. Si tu nous donnes la liste de tes plugins ça pourra peut-etre nous donner une piste
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
C'est peut-etre plxMyShop qui fait ca mais je ne trouve pas ou si c'est le cas.
Vu ta question j'en deduit que c'est pas une fonction de PluXml non plus
Voila ma liste de plugin
FAQ
plxMyContact
plxMyShop
SimpleStat
spxdatas (pas activé)
spxlightbox
spxplugindownloader
spxshortcodes
spxtynimce
Stay_connected
vignette
http://coderstoolbox.net/string/#!encoding=url&action=decode&charset=us_ascii
Et voila le resultat
document.write('aaa@bbb.ccc')
C'est bien l'addresse de test que j'ai utilise! Reste a savoir qui fait ca et ou est le ; manquant!
est ce que tu peux faire un simple fichier PHP qui contient juste "aaa@bbb.ccc" pour voir ce que ça produit ?
edit:
J'ai cree un fichier comme ca:
et voila le code source de la page
pas de modif!
une autre idée : est ce que tu peux mettre une adresse e-mail dans une page statique pour voir si elle est transformée ?
petite parenthèse : je viens de voir sur ton site que dans le menu "Panier" n'est pas traduit. est ce que c'est fait exprès ? après tout le travail que tu as fait pour rendre cette extension localisable, je veux bien jeter un coup d’œil à ça si tu en as besoin.
J'ai modifie la ligne du script pour coder un email en dur:
Le resultat est le meme.
Il y definitivement quelque chose qui assainit l'email...J'ai fait un essai en mettant aaa+bbb@ccc.ddd
et le decodage me retourne seulement bbb@ccc.ddd
La page affiche correctement l'email mais en regardant le code source on voit ca:
J'ai reussi a indentifier que le probleme est cause par le plugin spxtynimce (versio 3.0)
Si je le desactive sur la page statique l'adresse email est maintenant en claire dans le source.
Sur le panier je n'ai plus ce mechant message d'erreur mais le mail n'est toujours pas envoye. Il y a toujours quelquechose qui coince mais au moins je progresse!
Ceux qui est bizarre c'est que sur ma version de développement sur mon PC j'ai la même config et la tout marche avec le même plugin
Je me demande si je ne vais pas réinstaller le tout
En creusant de plus en plus voila ce que j'ai trouve.
Dans la config de plxMyShop je lui dit que mon email est philippe@domain1.com
Domain1 etant different du site web.
Quand c'est comme ca ca plante.
J'ai donc changer pour utiliser une addresse du meme domaine. L'amelioratio c'est que le commercant recoit maintenant un email de confirmation
Par contre le client lui ne recoit rien
Maintenant dans le panier si je met un email qui appartient au site alors la tout marche!
Je pense donc que le probleme ne vient pas ni de plxMyShop ni de PluXml mais plutot de la maniere dont le fournisseur gere l'envoi des mails
Je vais leur poser une question pour voir! C'est pas pratique si je suis le seul a pouvoir me commander du pain
pour spxtynimce je vais voir si je trouve quelque chose
Je vais essayer de faire un fichier php qui enverra un juste un email pour voir
C'est quand meme pas normal que si j'utilise des emails de mon domaine ca marche tres bien (pas d'erreur) mais si j'utilise un email d'un autre domaine ca me met une erreur!
Merci pour ca Mathieu
Il me reste plus qu'a resoudre le probleme du mail d'un domaine different
Pourrais tu essayer de ton cote de faire une commande fictive...si ca marche je t'expedie un croissant
pour la traduction de "Panier", c'est gérer dans la nouvelle version que tu peux télécharger là :
https://github.com/davidlhoumaud/plxMyShop/archive/develop.zip
histoire d'être complet, j'ai même rajouté un crochet qui permet de modifier le texte par défaut
Merci pour ca
Je suis en train de parler avec mon fournisseur mais c'est pas prometteur.
Par contre je me suis creer un petit fichier pour envoyer des mails qui utilise la meme fonction mail() et ca marche bien. Alors du coup je suis un peu perplexe!
Bon cela dit j'ai fait quelque experience et il semblerait que le problem soit au niveau du contenu du $headers.
Pour recapituler:
Si pour la commande j'utilise une adresse email de mon domaine alors tout marche pas de probleme.
Si j'utilise une autre addresse (cas normal) alors ca casse. je recois le message d'erreur et la commande n'est pas enregistre.
En simplifiant le $header au maximum pour avoir juste ca:
"From: addresse_email_du_domaine"
et bien la ca marche. L'email est bien envoye mais du coup le mail n'est plus en html mais du seul texte
Il y a quelque chose dans le header que sendmail (utilise par mail() ) n'aime pas mais je n'arrive pas a trouve quoi
En fait il y 2 problemes:
le 1er c'est que l'option de spxtynimce pour proteger l'email perturbe le plugin. Du coup j'ai du desactiver cette option.
le 2eme probleme je l'ai isole apres des centaines d'essai a la ligne 1089 du fichier plxMyShop.php
J'ai change la ligne pour rajouter un espace avant le < pour separe le nom du magasin de l'email. Si je supprime cet espace ca passe pas et le script retourne une erreur.
Ce que je ne m'explique pas par contre c'est que sur mon site de dev en local ca marche tres bien sans cet espace!