Problème mail html envoyé via php
J'ai fait des tas de recherches jusqu'alors, sur votre forum, ou sur d'autres sites. J'ai également testé des tas de synthaxes différentes y compris celle donnée sur php.net, mais sans succès.
Voila mon problème, j'ai un formulaire de demande de devis sur le site que je crée, et je veux que l'entreprise reçoive cette demande de devis sous une forme bien présentée, en HTML sans caractères spéciaux qui s'affichent bizarrement, mais rien a faire je n'obtiens jamais de résultat propre.
Voici mon script PHP :
<?php
$to = 'monmail@mail.com';
$devis_html = $_POST['devis'];
$genre = $_POST['genre'];
$prenom = $_POST['prenom'];
$nom = $_POST['nom'];
$societe = $_POST['societe'];
$adresse=$_POST['adresse'];
$cp = $_POST['CP'];
$ville = $_POST['ville'];
$pays = $_POST['pays'];
$tel = $_POST['tel'];
$mail = $_POST['mail'];
$nbs = $_POST['nbre_salaries'];
$service = $_POST['service'];
$sectact = $_POST['secteur_activite'];
$header = "From: \"Formulaire Devis\"<".$mail.'>'."\n";
$header .= 'Reply-to: \"JML\" <XX@XXXXXXXX.fr>'."\n";
$header .= 'MIME-Version: 1.0' . "\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\n";
$boundary = '-----='.md5(rand());
$sujet = 'Demande de devis (Site Internet)';
$devis = '<html><head></head><body>'.$genre.' '.$nom.' '.$prenom.', '."\n";
$devis .= 'Societe : '.$societe."\n";
$devis .= 'Service : '.$service."\n";
$devis .= $adresse."\n";
$devis .= $cp."\n";
$devis .= $ville."\n";
$devis .= $pays."\n";
$devis .= "\n".'Infos Supplementaires : '."\n";
$devis .= 'Nombre de Salaries : '.$nbs."\n";
$devis .= 'Secteur d\'activite : '.$sectact."\n";
$devis .= 'Tel : '.$tel."\n";
$devis .= 'E-Mail : '.$mail."\n";
$devis .= "\n".$devis_html.'</body></html>'."\n";
mail($to, $sujet, $devis, $header);
header('location: merci_d.htm');
exit;
?>
Tous se passe bien, le script s'éxécute sans problème, mais voila, ce que je reçois n'est pas du tout ce qui est demandé :
Monsieur TEST ben, Societe : XXX Service : Bureau_etudes 5 lot le ville 05459 france Infos Supplementaires : Nombre de Salaries : 20-49 Secteur d'activite : Agro_Agri Tel : 0953458525 E-Mail : i.n@livre.ru TESTTESTDEMANDEDEVISéà ¨ùê
Je précise que je remplis le formulaire avec des infos bidons et des accents pour avoir tous les points de vue sous le nez.
J'ai également un autre soucis, quand je soumet mon formulaire sous firefox, celui ci éxécute bien le script alors que sous internet explorer, celui ci m'ouvre une boite de dialogue avec les options "Ouvrir", "Enregistrer", "Annuler".
J'aurais donc 2 questions :
Comment faire pour avoir un mail en HTML, sans soucis d'encodage (j'ai testé en mettant ISO-8859-1 et en UTF-8, même resultat) pour n'avoir aucune balise affichée, un mail propre quoi :) ?
Comment faire pour qu'Internet explorer éxécute le script (IE 7.0) ?
Le site n'étant pas encore en ligne, je teste mes pages et script a l'aide de Wamp 2.0, avec un php.ini bien configuré.
Merci a tous de vos réponses, que j'espere positives, j'ai été pris par le temps, et j'aimerais avoir une solution d'ici demain soir si possible.
Bonsoir à tous !
Configuration: Windows Vista Firefox 3.0.12
27 réponses
Problème central : un formulaire de demande de devis en PHP envoie un mail HTML, mais le rendu reçu par l’entreprise n’est pas correctement formaté et les caractères spéciaux posent problème.
Des solutions essentielles émergent, notamment remplacer les retours à la ligne par des balises
ou nl2br(), et harmoniser l’encodage du site avec UTF-8 ou ISO-8859-1.
Pour le header, utiliser Content-type: text/html; charset=UTF-8, veiller à ce que les retours chariot soient correctement traités et envisager d'ajouter un meta charset dans le corps HTML du message.
D'autres répondants évoquent que Internet Explorer peut afficher une boîte de dialogue d’ouverture ou d’enregistrement lors de la soumission, suggérant d’aligner l’extension du fichier et le type MIME pour une exécution uniforme.
-
De rien ! bonne continuation =)
(pour le résolu je sais pas :p )
bye ! -
transforme les retour chariot php en <br>
ca devrait marcher (applique le comme utf8-encode de tout a l'heure ^^ )-
+1 Samy.
C'est parfait !
ça marche !
Et bien MILLE MERCI à tout ceux qui m'ont accordé un peu de leur temps. Vous m'avez (presque, faut pas éxagerer) sauvé la vie.
Bonne continuation a vous tous, et merci encore !
PS : Dois-je signaler un "résolu" ou quelque chose du genre ? Si oui, faut il que je m'adresse aux administrateurs ? Je ne suis pas un habitué du forum...
-
-
En effet, en HTML, le passage à la ligne, c'est <br> et non pas \n
Pas vraiment besoin de fonction tu peux les mettre directement à la fin de chacune de tes lignes "$devis.=", à la place de s \n
Mais si une partie du texte vien par exemple d'un textarea saisi par l'utilisateur, là il faudra effectivement utiliser nl2br() -
nl2br() ?
-
+1 le père ca marche sans souci sans utf8_encode, de plus je pensais pas du tout a cette fonction a vrai dire (c'est mes récent scripts que j'ai fais pour donner a manger a flash qui m'ont troublé) mais plutot a html_entity()...
-
@le père :
Tout mon site est en UTF-8 oui ;), ce ISO-8859-1 venait d'un tuto que j'avais copié collé a l'aveugle comme un vulgaire novice.
Je viens de remettre l'utf-8 à l'endroit ou tu m'a dit de le mettre, les accents marchent =D !
Par contre, les passages a la ligne sont toujours perdus...
Un enorme merci pour les accents déjà =). -
Chez moi ça marche bien sans utf8_encode
Mais : question à 100 balles : le formulaire d'où proviennent les données est-il lui même encodé en UTF-8 ou en iso-8859-1?
J'ai essayé les 2 et visiblement quand les données sont en utf-8 il faut que le $header .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; indique lui aussi l'encodage utf-8
Bref, il faudrait que ton site soit entièrement en utf8, ou entièrement en iso-8859-1, ce serait quand même plus simple. -
Aucune amélioration, j'ai même perdu les passages a la ligne...
Au moins les balises html ne s'affichent plus tel quel, mais il me faut maintenant du passage a la ligne, et surtout des caractères correctement encodé...
Je voudrais abuser encore un peu de votre générosité en solicitant mon aide.. je dois présenter la plupart des fonctionnalités du site ce soir, et si j'ai un mail mal affiché comme ça, ça va pas le faire..
D'autres idées ? -
Contributeurlol ne te tire pas une balle le père ^^
notre curé te dis de faire ca:
$devis = '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head><body>'.$genre.' '.$nom.' '.$prenom.', '."\n";-
C'est exactement ce que je viens de faire, alors je vous remet le script et l'email reçu :
Script :<?php $to = 'XXX@XXXXXX.fr'; $devis_html = $_POST['devis']; $genre = $_POST['genre']; $prenom = $_POST['prenom']; $nom = $_POST['nom']; $societe = $_POST['societe']; $adresse=$_POST['adresse']; $cp = $_POST['CP']; $ville = $_POST['ville']; $pays = $_POST['pays']; $tel = $_POST['tel']; $mail = $_POST['mail']; $nbs = $_POST['nbre_salaries']; $service = $_POST['service']; $sectact = $_POST['secteur_activite']; $header = "From: \"Formulaire Devis\"<".$mail.'>'."\n"; $header .= 'Reply-to: \"JML\" <XX@XXXXX>'."\n"; $header .= 'MIME-Version: 1.0' . "\n"; $header .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; $sujet = 'Demande de devis (Site Internet)'; $devis = '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body>'.$genre.' '.$nom.' '.$prenom.', '."\n"; $devis .= 'Societe : '.$societe."\n"; $devis .= 'Service : '.$service."\n"; $devis .= $adresse."\n"; $devis .= $cp."\n"; $devis .= $ville."\n"; $devis .= $pays."\n"; $devis .= "\n".'Infos Supplementaires : '."\n"; $devis .= 'Nombre de Salaries : '.$nbs."\n"; $devis .= 'Secteur d\'activite : '.$sectact."\n"; $devis .= 'Tel : '.$tel."\n"; $devis .= 'E-Mail : '.$mail."\n"; $devis .= "\n".$devis_html.'</body></html>'."\n"; mail($to, $sujet, utf8_encode($devis), $header); header('location: merci_d.htm'); exit; ?>
Mail :
Monsieur fezfze fezfze, Societe : fezfze Service : Bureau_etudes fezfez fezfze fezfez fezf Infos Supplementaires : Nombre de Salaries : 1-19 Secteur d'activite : Armement Tel : 081561589 E-Mail : buifezfz@fezfze.fr Veuillez taper votre demanfazefaééde de devis ici..
-
-
Il te manque toujours le
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> dans ton mail... Je ne sais plus comment le dire -
Les histoires de codage c'est horrible j'essaye en ce moment de faire un flux rss que je lis par iphone et le validateur est pas content a cause d'une histoire d'encodage des carractère T_T j'suis un pti stagiaire de 20ans j'ai le droit a l'erreur xD
bon alors je dirais a vu de nez de faire comme ca :
<?php
$to = 'monmail@mail.com';
$devis_html = $_POST['devis'];
$genre = $_POST['genre'];
$prenom = $_POST['prenom'];
$nom = $_POST['nom'];
$societe = $_POST['societe'];
$adresse=$_POST['adresse'];
$cp = $_POST['CP'];
$ville = $_POST['ville'];
$pays = $_POST['pays'];
$tel = $_POST['tel'];
$mail = $_POST['mail'];
$nbs = $_POST['nbre_salaries'];
$service = $_POST['service'];
$sectact = $_POST['secteur_activite'];
$header = "From: \"Formulaire Devis\"<".$mail.'>'."\n";
$header .= 'Reply-to: \"JML\" <XX@XXXXXXXX.fr>'."\n";
$header .= 'MIME-Version: 1.0' . "\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\n";
$boundary = '-----='.md5(rand());
$sujet = 'Demande de devis (Site Internet)';
$devis = '<html><head></head><body>'.$genre.' '.$nom.' '.$prenom.', '."\n";
$devis .= 'Societe : '.$societe."\n";
$devis .= 'Service : '.$service."\n";
$devis .= $adresse."\n";
$devis .= $cp."\n";
$devis .= $ville."\n";
$devis .= $pays."\n";
$devis .= "\n".'Infos Supplementaires : '."\n";
$devis .= 'Nombre de Salaries : '.$nbs."\n";
$devis .= 'Secteur d\'activite : '.$sectact."\n";
$devis .= 'Tel : '.$tel."\n";
$devis .= 'E-Mail : '.$mail."\n";
$devis .= "\n".$devis_html.'</body></html>'."\n";
mail($to, $sujet, utf8_encode($devis), $header);
header('location: merci_d.htm');
exit;
?>
si ca marche pas montre l'erreur que tu as =o-
Tu sais moi, je suis un jeune con de 17 ans, qui a juste fait une année de DUT Informatique et qui fait le site internet d'une société d'amis hein ^^"...
en copiant exactement le code que tu m'a donné, j'obtiens :
Monsieur fezfze fezfzefe, Societe : fezfze Service : Commercial fezfzeééé zafdzadédéd dé"dzédézd fez Infos Supplementaires : Nombre de Salaries : 50-99 Secteur d'activite : Services Tel : 1891641846 E-Mail : fezfze@fezfz.fr Veuillez taper votre demande de devis iezfzeci..
-
-
oui là c'est du plein texte que t'envoie ^^ mais fais comme tu le faisai au début mais tu utilise utf8_encode et tiens nous au courant merci
-
vire ces balises head et utilise la fonction utf8_encode() ca devrait rouler
-
Tu as retiré de tes headers le mime-type ! Il ne peut plus savoir que c'est du HTML
Si tu fais des modifications, sans nous le dire, on va avoir du mal à t'aider -
Envoi TOUS ton script, toute ta page de mail stp ^^
-
Je ne vois pas de parse error dans les lignes que tu as indiquées. Il y en avait (j'avais oublié un ; à la fin de $devis = '<html><head>'."\n") mais tu l'as corrigée.
Pourrais-tu dire quelle est exactement la ligne 34, et donner aussi celles qui précède ?
D'autre part, je te signale que ni Firefox ni internet explorer n'ont jamais exécuté un script PHP, c'est le serveur qui les exécute. Quand tu dis dans ton message 9 Et Internet explorer ne veux plus m'executer le script, qu'est-ce que ça veut dire ? Que fais-tu pour essayer de l'exécuter et qu'est-ce qui se passe - ou ne se passe pas ? -
euh tu comprend ton code Oo? t'as mis tes balise head dans le body lol :o et t'as surement 2x body
-
Euh, mes balises head sont bien en dehors du body oO...
Et non, si tu regarde bien le mail reçu, les balises affichées, y'a qu'un seul body...
Le gras, c'est moi qui l'ai rajouté, en me plantant un peu..
Si tu prefere le mail que je reçois est exactement ça :
<html><head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head><body>Veuillez tapefezfzer votre demande de devis ici.. Monsieur fezfze fzefze, Societe : fez Service : Etudiant fezfze fezfez fez fez Tel : 1789189186 E-Mail : niufoenz@fbez.fr Infos Supplementaires : Nombre de Salaries : 20-49 Secteur d'activite : Medical</body>
Ni plus ni moins, pourquoi continue il de m'afficher des caractères mal encodés, et surtout, pourquoi m'affiche il les balises html au lieu de les "utiliser" pour mettre en page ?!
-
-
J'ai réussi a regler le soucis d'ouverture, en fait, je lançais la page a partir de la clé USB au lieu de wamp...
Enfin bref, par contre, ce que tu m'a donné ce matin ne marche toujours pas, le mail que je reçois est le suivant :
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head><body>Veuillez tapefezfzer votre demande de devis ici..
Monsieur fezfze fzefze,
Societe : fez
Service : Etudiant
fezfze
fezfez fez
fez
Tel : 1789189186
E-Mail : niufoenz@fbez.fr
Infos Supplementaires :
Nombre de Salaries : 20-49
Secteur d'activite : Medical</body> -
PS: Et Internet explorer ne veux plus m'executer le script, alors qu'il me mettait l'erreur il y a 2 minutes...(je ne suis pas sur le même PC qu'hier)
-
Je viens d'essayer et..
Parse error: parse error in C:\Program Files\wamp\www\JML\Fr\Services\traitd_fr.php on line 34
sachant que la ligne 34 est dans ce bloc :
$devis = '<html><head>'."\n"; $devis .= '<meta http-equiv="content-type" content="text/html; charset=UTF-8">'."\n"; $devis .= '</head><body>'.$devis_html."\n"; $devis .= $pl.$genre." ".$nom." ".$prenom.", ".$pl;
- 1
- 2