Page 1 sur 1

une petite aide pour valider formulaire

Posté : 12 déc. 2006, 10:09
par coxine
Bonjour à tous :D
J'ai fait un formulaire avec pièce jointe, j'aurais besoin de votre aide pour le valider.
1. A savoir : rendre obligatoire l'envoi de fichier ce qui n'a pas l'air d'être le cas...le mail part quand même... :cry:
2. M'assurer que le fichier n'est pas autre qu'un .doc ou un .pdf
Je l'ai construit sur la base de tutos.
3. Comment éviter le hacking ? j'ai lu qquepart une fonction permettant de refuser l'envoi de documents php ou autres, mais je ne mets plus la main dessus.
4. si je mets une pièce jointe .jpg, j'ai ces messages d'erreur qui apparaissent et le formulaire part quand meme :roll:

Code : Tout sélectionner

Warning: fopen(cox.jpg): failed to open stream: No such file or directory in d:\programmes\easyphp1-8\www\site\envoi_cv.php on line 79 Warning: filesize(): Stat failed for cox.jpg (errno=2 - No such file or directory) in d:\programmes\easyphp1-8\www\site\envoi_cv.php on line 80 Warning: fread(): supplied argument is not a valid stream resource in d:\programmes\easyphp1-8\www\site\envoi_cv.php on line 80 Warning: fclose(): supplied argument is not a valid stream resource in d:\programmes\easyphp1-8\www\site\envoi_cv.php on line 81 Warning: unlink(cox.jpg): No such file or directory in d:\programmes\easyphp1-8\www\site\envoi_cv.php on line 107
Voici une partie de mon code
<?php 
$success=false;
$message="";
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!"; // INIT DES VARIABLES 
if(!isset($_POST['societe'])) $societe=""; else $societe=htmlentities(addslashes($_POST['societe'])); 
......
if(!isset($_FILES['fichier'])) $fichier=""; else $fichier=$_FILES['fichier'];

$name_file = $_FILES['fichier']['name']; 
$source=$_FILES['fichier']['tmp_name'];

move_uploaded_file($source, "./".$name_file); 

$extension=get_extension($name_file);

$type="text/plain";
if($type=="doc")
{
   $type="text/vnd.ms-word";
}
$type2="application/pdf";

function get_extension($filename)
{
   $parts = explode('.',$filename);
   $last = count($parts) - 1;
   $ext = $parts[$last];
   return $ext;
}
//vérifications
if (($tel!="")&&($fichier!="")&&($nom!="")&&($prenom!="")&&($mail!="")&&($sujet!="")) { //si champs pas vides
if(($mail) && (preg_match($verif, $mail))){ // si le mail est bon
if($_FILES['fichier']!="")
{
//----------------------------------
// Construction de l'entête
//----------------------------------
$boundary = "-----=".md5(uniqid(rand()));
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header .= "\r\n";
//----------------------------------
// Construction du message
//----------------------------------
$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";
$msg .= "--$boundary\r\n";
$msg .= "Content-Type: $type; charset=\"iso-8859-1\"\r\n";
$msg .= "Content-Transfer-Encoding:8bit\r\n";
$msg .= "\r\n";
$msg .= "Raison sociale : $societe";
$msg .= "\r\n";
$msg .= "Nom : $nom";
$msg .= "\r\n";
$msg .= "Prénom : $prenom";
$msg .= "\r\n";
$msg .= "Statut : $sujet";
$msg .= "\r\n";
$msg .= "Adresse : ".$_POST['adresse1']."";
$msg .= "\r\n";
$msg .= "Téléphone : $tel";
$msg .= "\r\n";
$msg .= "Portable : $portable";
$msg .= "\r\n";
$msg .= $_POST['message1'];
$msg .= "\r\n";
//----------------------------------
// Pièce jointe
//----------------------------------
if($name_file!="")
{
$file = $name_file;
$fp = fopen($file, "rb");  
$attachment = fread($fp, filesize($file));
fclose($fp);

$attachment = chunk_split(base64_encode($attachment));

$msg .= "--$boundary\r\n";
$msg .= "Content-Type: $type2; name=\"$file\"\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
$msg .= "Content-Disposition: attachment; filename=\"$file\"\r\n";
$msg .= "\r\n";
$msg .= $attachment . "\r\n";
$msg .= "\r\n\r\n";
$msg .= "--$boundary--\r\n";
}

$destinataire = '[email protected]';
$expediteur   = $_POST['mail'];
$reponse      = $expediteur;
//on envoie le mail
mail($destinataire, 'dépot de CV', $msg,
     "Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header);
}
if($name_file!="")
{
unlink($name_file);
}
print("<br>\n");

$success=true;
$message =  "Votre demande $prenom $nom a &eacute;t&eacute; post&eacute;e avec succ&egrave;s ! <br /> 
Elle sera trait&eacute;e dans les meilleurs d&eacute;lais.<br /> 
Nous vous remercions de votre visite !";
}
else{
$verif=false;
$message= "Cette adresse Email n'est pas valide";
}
}else{ 
$success = false;
$message = "Merci de remplir les champs obligatoires";
}
?>
Merchi bcp !!! :lol:

Posté : 12 déc. 2006, 11:46
par coxine
Re !
J'ai un peu modifié le code mais ça ne semble pas fonctionner (les messages d'erreurs de vérification) :roll:
Voici le code :
<?php 
$success=false;
$message="";
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!"; // INIT DES VARIABLES 
if(!isset($_POST['societe'])) $societe=""; else $societe=htmlentities(addslashes($_POST['societe'])); 
...
if(!isset($_FILES['fichier'])) $fichier=""; else $fichier=$_FILES['fichier'];
 
$name_file = $_FILES['fichier']['name']; 
$source = $_FILES['fichier']['tmp_name'];
$typemime = $_FILES['fichier']['type']; 
$taille = $_FILES['fichier']['size'];
 
// extensions autorisées
$extensions_ok = array('txt', 'doc', 'rtf', 'pdf'); 
// la taille maximale du fichier en octets, ici 2mo 
$taille_max = 2097152; 
 
move_uploaded_file($source, "./".$name_file); 
 
//----------------------------------
// Construction de l'entête
//----------------------------------
if (($fichier!="")&&($tel!="")&&($nom!="")&&($prenom!="")&&($mail!="")&&($sujet!="")) { //si champs vides
if(($mail) && (preg_match($verif, $mail))){ // si le mail est bon
if( !in_array( substr(strrchr($_FILES['fichier']['name'], '.'), 1), $extensions_ok ) ) {  //si bon format
if( file_exists($source) && $taille > $taille_max) { // si taille autorisée
if($_FILES['fichier']!="")
{
$boundary = "-----=".md5(uniqid(rand()));
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header .= "\r\n";
 
$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";
 
$msg .= "--$boundary\r\n";
 
$msg .= "Content-Type: $typemime; charset=\"iso-8859-1\"\r\n";
$msg .= "Content-Transfer-Encoding:8bit\r\n";
$msg .= "\r\n";
$msg .= "Raison sociale : $societe";
$msg .= "\r\n";
$msg .= "Nom : $nom";
$msg .= "\r\n";
$msg .= "Prénom : $prenom";
$msg .= "\r\n";
$msg .= "Statut : $sujet";
$msg .= "\r\n";
$msg .= "Adresse : ".$_POST['adresse1']."";
$msg .= "\r\n";
$msg .= "Téléphone : $tel";
$msg .= "\r\n";
$msg .= "Portable : $portable";
$msg .= "\r\n";
$msg .= $_POST['message1'];
$msg .= "\r\n";
 
if($name_file!="")
{
$file = $name_file;
$fp = fopen($file, "rb");  
$attachment = fread($fp, filesize($file));
fclose($fp);
 
$attachment = chunk_split(base64_encode($attachment));
 
 
$msg .= "--$boundary\r\n";
$msg .= "Content-Type: $typemime; name=\"$file\"\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
$msg .= "Content-Disposition: attachment; filename=\"$file\"\r\n";
$msg .= "\r\n";
$msg .= $attachment . "\r\n";
$msg .= "\r\n\r\n";
$msg .= "--$boundary--\r\n";
}
 
$destinataire = '[email protected]';
$expediteur   = $_POST['mail'];
$reponse      = $expediteur;
 
mail($destinataire, 'Envoi de fichier', $msg,
     "Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header);
 
}
 
if($name_file!="")
{
unlink($name_file);
}
print("<br>\n");
 
 
		//----------------------------------
		// Construction de l'entête
		//----------------------------------
		$success=true;
		$message =  "Votre demande $prenom $nom a &eacute;t&eacute; post&eacute;e avec succ&egrave;s ! <br /> 
		Elle sera trait&eacute;e dans les meilleurs d&eacute;lais.<br /> 
		Nous vous remercions de votre visite !";
		}else{
		$sucess = false;
		$message = 'Extension non autorisée !';  
		}
		}else{
		$sucess = false;
		$message = 'Votre fichier doit faire moins de 2mo !'; 
		}
		}else{
		$verif=false;
		$message= "Cette adresse Email n'est pas valide";
		}
		}else{ 
		$success = false;
		$message = "Merci de remplir les champs obligatoires";
		}
 
?>
Une idée de ce qui cloche ? :?
merci

Posté : 12 déc. 2006, 11:47
par Ryle
Hello :) (ça f'sait longtemps tiens ?! :))

Alors déjà quelques p'tites remarques :
- autant au début tout va bien, autant à la fin y aurais comme un léger laissé allé au niveau de l'indentation ;)
- la valeur que tu récupères dans $_FILES['fichier'] est un tableau, et je ne suis pas certain qu'il soit judicieux de comparer un tableau à une chaine vide :) J'ai peur qu'il te retourne "Array()" (ce qui est différent de vide)

A partir de la, tu devrais pouvoir plus facilement contraindre l'utilisateur à joindre un fichier, avec isSet() et en vérifiant plutôt si $name_file est différent de vide.

2. Y a quelque chose de pas logique ici :
$type="text/plain"; 
if($type=="doc") 
{ 
   $type="text/vnd.ms-word"; 
} 
$type2="application/pdf"; 
tu donnes une valeur à $type puis tu vérifies si elle pas égale à "doc" ... tu devrais regarder le contenu de $_FILES['fichier']['type'] pour t'assurer qu'il s'agit d'un type word ou adobe.
Tu peux aussi te baser sur l'extension, mais c'est moins sur...

3. pour éviter l'upload de fichier php pour ma part, si je détecte la chaine ".php" dans le nom du fichier, je rajoute l'extention ".txt" à la fin pour être sur que le serveur ne l'exécutera pas. Y a probablement mieux, mais pour moi c'est suffisant :)
Dans ton cas, si tu vérifies qu'il s'agit de fichier word ou pdf avant de faire le move_uploaded_file() sur ton serveur, je ne pense pas que tu risques grand chose :)

4. si tu limites juste à word ou pdf, et que tu réussis à bloquer l'envoi de mail pour les autres type de fichier, y a peut être pas besoin de s'embêter à résoudre les problèmes des jpg ;)


Ps : tu n'es pas obligée de mettre des parenthèse autour de tous les tests d'un if. Ceci fonctionne tout aussi bien, ne surcharge pas le code et le rend plus lisible :)
if ($tel!="" && $fichier!="" && $nom!="" && $prenom!="" && $mail!="" && $sujet!="" ) {
Edit :
Ps : ah pis au lieu de file_exists($source), c'est le fichier copié et que tu vas lire qu'il faudrait tester et non pas celui temporaire ;)

Edit :
Pps : non mais c'est quoi ces manières de changer tout le code pendant que d'autres répondent au premier ?! :) (ceci dit mes remarques sont toujours vallables ;))

Posté : 12 déc. 2006, 12:07
par coxine
coucou !!!
:D c'est sympa de se souvenir des newbies :wink:
Vi désolée je change avant de recevoir des réponses !
Alors : Déjà ces tests semblent fonctionner
$name_file = $_FILES['fichier']['name']; 
$source = $_FILES['fichier']['tmp_name'];
$typemime = $_FILES['fichier']['type']; 
$taille = $_FILES['fichier']['size'];

// extensions autorisées
$extensions_ok = array('txt', 'csv', 'doc', 'rtf', 'pdf'); 
// Configurez la taille maximale du fichier en octets, ici 2mo 
$taille_max = 2097152; 
// vérifications 
    if( !in_array( substr(strrchr($_FILES['fichier']['type'], '.'), 1), $extensions_ok ) ) 
    { 
        // message d'erreur
        $message = 'Extension non autorisée !'; 
    } 
    elseif( file_exists($source) && $taille > $taille_max) 
    { 
        // réponse d'erreur
        $message = 'Votre fichier doit faire moins de 2mo !'; 
        // ----------------- Fin configuration -------------------- 
    } 
move_uploaded_file($source, "./".$name_file); 

//----------------------------------
// Construction de l'entête
//----------------------------------
if ($name_file!=""&&$tel!=""&&$nom!=""&&$prenom!=""&&$mail!=""&&$sujet!="") { //si champs non vides
if($mail && preg_match($verif, $mail)){ // si le mail est bon

if($_FILES['fichier']!="") // si le fichier existe
{
Est-ce un bon début ?
Je regarde pour les extensions.... :wink:

Posté : 12 déc. 2006, 12:34
par Ryle
Bah, ca fait un moment que tu n'es plus une newbie, t'es juste une "quipassepassouvent" ;)

Alors quelques p'tites modif que je ferais :)
$erreur = false; // avoir un flag pour repérer les erreurs

if( !in_array( substr(strrchr($_FILES['fichier']['type'], '.'), 1), $extensions_ok ) )  {  
  $erreur = true; // erreur extension
  $message = 'Extension non autorisée !';    // message d'erreur 
}  
elseif( file_exists($source) && $taille > $taille_max)  {
  $erreur = true; // erreur extension
  $message = 'Votre fichier doit faire moins de 2mo !';    // message d'erreur 
}  

if(!$erreur) {// ne faire le move et l'envoi du mail que s'il n'y a pas d'erreur
  move_uploaded_file($source, "./".$name_file);  
  ...
  // au lieu de 
  // if($_FILES['fichier']!="") // si le fichier existe 
  // utilise plutôt
  // if(isSet($_FILES['fichier']) // si un fichier a été envoyé 
  // ou 
  if(file_exists("./".$name_file)) // si le fichier a bien été copié

  mail(...);
}
else { // erreur format du fichier
  echo $message;
  ...
}

Posté : 12 déc. 2006, 14:16
par coxine
bouhou
PLus je modifie et plus je rencontre un mur d'erreurs |*()
Merci de tes conseils.
là où j'en suis, on peut envoyer n'importe quel type de fichier.
:roll:
<?php 
$success=false;
$message="";
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!"; // INIT DES VARIABLES 
....
$name_file = $_FILES['fichier']['name']; 
$source = $_FILES['fichier']['tmp_name'];
$typemime = $_FILES['fichier']['type']; 
$taille = $_FILES['fichier']['size'];

// extensions autorisées
$extensions_ok = array('txt', 'csv', 'doc', 'rtf', 'pdf'); 
// taille maximale du fichier en octets, ici 2mo 
$taille_max = 2097152; 

erreur = false; // avoir un flag pour repérer les erreurs 
if( !in_array( substr(strrchr($_FILES['fichier']['type'], '.'), 1), $extensions_ok ) )  {   
  $erreur = true; // erreur extension 
  $message = 'Extension non autorisée !';    // message d'erreur  
}   
elseif( file_exists($source) && $taille > $taille_max)  { 
  $erreur = true; // erreur extension 
  $message = 'Votre fichier doit faire moins de 2mo !';    // message d'erreur  
}   

if(!$erreur) {// ne faire le move et l'envoi du mail que s'il n'y a pas d'erreur 
  move_uploaded_file($source, "./".$name_file);   
 
  if(isSet[$_FILES['fichier'])){ // si le fichier a bien été copié 

	if ($name_file!=""&&$tel!=""&&$nom!=""&&$prenom!=""&&$mail!=""&&$sujet!="") { //si champs non vides
		
		if($mail && preg_match($verif, $mail)){ // si le mail est bon
		//----------------------------------
		// Construction de l'entête
		//----------------------------------
...
mail($destinataire, 'Formulaire', $msg,"Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header);
		
		}

		if($name_file!="")
		{
		unlink($name_file);
		}
		print("<br>\n");


		//----------------------------------
		// messages
		//----------------------------------
		$success=true;
		$message =  "Votre demande $prenom $nom a &eacute;t&eacute; post&eacute;e avec succ&egrave;s ! <br /> 
		Elle sera trait&eacute;e dans les meilleurs d&eacute;lais.<br /> 
		Nous vous remercions de votre visite !";
		}else{
		$verif=false;
		$message= "Cette adresse Email n'est pas valide";
		}
		}else{ 
		$success = false;
		$message = "Merci de remplir les champs obligatoires !";
		}

?>
J'avoue que je peine un max....fpfff quelle idée de se lancer dans la pièce jointe...qui arrive mais pas comme je le voudrais !

Posté : 12 déc. 2006, 14:16
par coxine
bouhou
PLus je modifie et plus je rencontre un mur d'erreurs |*()
Merci de tes conseils.
là où j'en suis, on peut envoyer n'importe quel type de fichier.
:roll:
<?php 
$success=false;
$message="";
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!"; // INIT DES VARIABLES 
....
$name_file = $_FILES['fichier']['name']; 
$source = $_FILES['fichier']['tmp_name'];
$typemime = $_FILES['fichier']['type']; 
$taille = $_FILES['fichier']['size'];

// extensions autorisées
$extensions_ok = array('txt', 'csv', 'doc', 'rtf', 'pdf'); 
// taille maximale du fichier en octets, ici 2mo 
$taille_max = 2097152; 

erreur = false; // avoir un flag pour repérer les erreurs 
if( !in_array( substr(strrchr($_FILES['fichier']['type'], '.'), 1), $extensions_ok ) )  {   
  $erreur = true; // erreur extension 
  $message = 'Extension non autorisée !';    // message d'erreur  
}   
elseif( file_exists($source) && $taille > $taille_max)  { 
  $erreur = true; // erreur extension 
  $message = 'Votre fichier doit faire moins de 2mo !';    // message d'erreur  
}   

if(!$erreur) {// ne faire le move et l'envoi du mail que s'il n'y a pas d'erreur 
  move_uploaded_file($source, "./".$name_file);   
 
  if(isSet[$_FILES['fichier'])){ // si le fichier a bien été copié 

	if ($name_file!=""&&$tel!=""&&$nom!=""&&$prenom!=""&&$mail!=""&&$sujet!="") { //si champs non vides
		
		if($mail && preg_match($verif, $mail)){ // si le mail est bon
		//----------------------------------
		// Construction de l'entête
		//----------------------------------
...
mail($destinataire, 'Formulaire', $msg,"Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header);
		
		}

		if($name_file!="")
		{
		unlink($name_file);
		}
		print("<br>\n");


		//----------------------------------
		// messages
		//----------------------------------
		$success=true;
		$message =  "Votre demande $prenom $nom a &eacute;t&eacute; post&eacute;e avec succ&egrave;s ! <br /> 
		Elle sera trait&eacute;e dans les meilleurs d&eacute;lais.<br /> 
		Nous vous remercions de votre visite !";
		}else{
		$verif=false;
		$message= "Cette adresse Email n'est pas valide";
		}
		}else{ 
		$success = false;
		$message = "Merci de remplir les champs obligatoires !";
		}

?>
J'avoue que je peine un max....fpfff quelle idée de se lancer dans la pièce jointe...qui arrive mais pas comme je le voudrais !

Posté : 12 déc. 2006, 14:43
par coxine
bon je crois qu'en reprenant tout, j'arrive à qqch
$name_file = $_FILES['fichier']['name']; 
$source = $_FILES['fichier']['tmp_name'];
$taille = $_FILES['fichier']['size'];
$typemime = $_FILES['fichier']['type']; 
$error = $_FILES['fichier']['error'];

if($error>0)
{
	echo 'problème : ';
	switch ($error)
	{
	case 1 : echo 'Fichier trop volumineux';break;
	case 2 : echo 'fichier trop volumineux';break;
	case 3 : echo 'fichier non transféré';break;
	case 4 : echo 'fichier non téléchargé';break;
	}
  exit;
 } // fin verifications
if($typemime !='text/plain')
	{
	echo 'mauvais format de fichier';
	exit;
	}
  move_uploaded_file($source, "./".$name_file);   
 
  if(isSet($_FILES['fichier'])){ // si le fichier a bien été copié 

	if ($name_file!=""&&$tel!=""&&$nom!=""&&$prenom!=""&&$mail!=""&&$sujet!="") { //si champs non vides
		
		if($mail && preg_match($verif, $mail)){ // si le mail est bon
C'est mieux non ?
Je vais me renseigner sur les type_mime
Puis-je faire les vérif de fichier APRES les vérifs de champs obligatoires ?

Posté : 12 déc. 2006, 15:27
par Ryle
Bah en fait, le contrôle d'extension tu le fais déjà bien ici :
$extensions_ok = array('txt', 'csv', 'doc', 'rtf', 'pdf');  
...
if( !in_array( substr(strrchr($_FILES['fichier']['type'], '.'), 1), $extensions_ok ) )  { 

C'est suffisant pour restreindre le genre de fichier que tu vas reçevoir... le type mime est lui plus précis, puisque je peux très bien renommer un fichier jpg en ".doc", il serait ainsi uploadé (avec le code ci-dessus), mais serait inexploitable si on tente de l'ouvrir directement. Le type mime te dirait quant à lui "Naaaannn c'est du image/jpeg et moi j't'ai dis que je voulais que application/pdf, alors essayes pas de m'la faire en changeant le nom du fichier, je suis un véritable cerbère !" ;)

Par contre là t'as fait un mix du code et du commentaire :
if(isSet($_FILES['fichier'])){ // si le fichier a bien été copié 
Le tes n'est pas faux, mais pour bien comprendre, à ce niveau :
- Si if(isSet($_FILES['fichier'])) est vrai c'est qu'un fichier a été envoyé, mais c'est tout ce qu'on en sait.
- Si if(move_uploaded_file($source, "./".$name_file)) est vrai, c'est que le fichier a été envoyé, et a correctement été copié sur le serveur.
- Si if(file_exists("./".$name_file)) est vrai, c'est que le fichier est déjà présent sur le serveur (on cherche pas à savoir d'où il vient, on sait juste s'il est là ou pas :))

Quant à l'ordre des vérifications, tu les fais comme tu veux, il n'y a pas de règles à respecter, juste un peu de logique à avoir. Tu peux très bien commencer par vérifier si toutes les données sont présentes avant même de te soucier de savoir si le fichier est là et est bon ou pas. Et c'est d'ailleurs bien plus judicieux puisque cela t'évite des traitements inutiles (dont la copie du fichier) si l'un des champs n'est pas renseigné (et du coup pas besoin de le supprimer ensuite si le reste du traitement ne se fait pas :))

Posté : 12 déc. 2006, 17:25
par coxine
merci maitre !
Tu as raison, je n'ai pas pris le temps de corriger mes commentaires.
Je préfère cette méthode et je commence effectivement par vérifier si les champs obligatoires sont remplis...puisque la pièce jointe se situe en bas de formulaire.
Puis ensuite, je fais la vérification de format et taille.
Donc là, je suis certaine de ne pas me prendre dans la figure un fichier .php ?
if(($typemime !='text/plain')&&($typemime!='application/pdf')&&($typemime!='application/msword'))
là je suis certaine de me compliquer la vie
Bon me reste à revoir le code d'envoi du mail
Car à vrai dire je ne connaissais pas et il me semble que j'ai fait une erreur.
Car lorsque j'essaye d'envoyer un pdf, le mail part, mais il y a un "attachement.pdf" supplémentaire dans le mail et le contenu du formulaire ne passe pas non plus.....
:roll: strange....