2009-08-12 6 views
1

Je construis un système de commande simple et je souhaite envoyer un e-mail après la soumission du formulaire. Mon code PHP ressemble à ceci:Texte additionnel dans le corps de l'e-mail

$name=$_POST["orderName"]; 
$company=$_POST["orderCompany"]; 
$email=$_POST["orderEmail"]; 
$phone=$_POST["orderPhone"]; 
$headers = "From: $email\r\n" . 

$item1=$_POST["orderItem1"]; 
$qty1=$_POST["orderQty1"]; 

$item2=$_POST["orderItem2"]; 
$qty2=$_POST["orderQty2"]; 

$item3=$_POST["orderItem3"]; 
$qty3=$_POST["orderQty3"]; 

$date = date("l, F j Y, G:i") ; 

$message="Message sent: $date \n\n 

Name: $name\n 
Company: $company\n 
Email: $email\n 
Phone: $phone\n\n 

Order:\n 
$item1 \tx$qty1\n 
$item2 \tx$qty2\n 
$item3 \tx$qty3\n"; 

mail("[email protected]", "Order", $message, $headers); 

Cela fonctionne très bien, sauf dans le corps de l'e-mail que je reçois la valeur de chaîne Item1 $ au début, avant le « Message envoyé ... » - juste comme je l'ai ajouté au message $ (que je ne vois pas aussi loin que je peux voir).

Répondre

6

Où avez-vous ceci:

$headers = "From: $email\r\n" . 

vous voulez ceci:

$headers = "From: $email\r\n"; 

Sinon, vous concaténer tout ce qui vient sur la ligne suivante (qui se trouve être la définition de $item1) à la fin de $headers. Bien que ce ne soit pas techniquement valide (c'est-à-dire que le contenu fasse partie des en-têtes des messages et non du corps), la plupart des clients de messagerie vont en réalité hausser les épaules et l'afficher de toute façon.

+0

+1 Je parie que c'est tout. – karim79

+1

Merci, c'était très stupide de ma part. –

1

S'il vous plaît, s'il vous plaît, s'il vous plaît, ajoutez un peu de désinfection à vos variables POST avant d'aller en production.

Voyons voir:

$email=$_POST["orderEmail"]; 
$headers = "From: $email\r\n"; 
mail("[email protected]", "Order", $message, $headers); 

je pourrais envoyer une requête POST où "orderEmail" contient:

"[email protected]\r\n 
From: [email protected]\r\n 
BCC: [email protected], [email protected]" 

etc. et votre forme inoffensive fonctionnerait très bien pour moi d'envoyer du spam dans le monde entier. This site suggère:

if (ereg("[\r\n]", $name) || ereg("[\r\n]", $email)) { 
    [... direct user to an error page and quit ...] 
} 
+0

Je vais le faire, merci pour l'avertissement! –

Questions connexes