Formulaire Php + pièce jointe bloquée chez Alice

Invité
Invité n'ayant pas de compte PHPfrance

11 juin 2011, 12:58

Bonjour à tous,

Je travaille depuis plusieurs mois sur mon site et voici plusieurs semaines que je bloque sur mon formulaire de contact Php. Après avoir effectué de nombreuses rectifs pour l'adapter à ma situation, tout fonctionne parfaitement, à un point près (il en fallait bien un !).

En fait, il s'agit d'un formulaire contenant des infos (bien sûr) et une pièce jointe. Jusque-là, tout va bien. Le hic, c'est que tout passe bien, sauf quand j'envoie (en test) un mail avec image (.jpg, .gif...) avec un destinataire chez Alice (mon FAI).

Je suis hébergée chez Ovh et je ne vois pas où ça bloque.

Je reçois bien le mail avec la pièce jointe chez Ovh, mais le destinataire (dans mon test : aliceadsl) ne reçoit pas de copie, rien du tout. Pourtant, aucune erreur, aucun message, rien.
Par contre, si j'envoie le formulaire avec aucune pièce jointe, ou une pièce jointe en .doc ou .pdf, là ça passe.

Il semblerait donc qu'Alice bloque les images issues de mon formulaire.
J'ai fait le test avec Hotmail et aucun problème...

Je ne sais plus où chercher alors si vous pouviez m'aider à y voir plus clair, ce serait vraiment sympa.
Merci et à bientôt j'espère :D

Petit nouveau ! | 3 Messages

11 juin 2011, 13:05

Oups, je n'étais pas connectée, désolée ! :oops:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

11 juin 2011, 13:21

Salut,

Est ce que tu pourrais nous montrer le code qui fonctionne et celui qui ne fonctionne pas ?
C'est sûrement un problème d'entete qui ne convient pas a Alice et du coup tu te retrouve soit dans le spam soit il distribut pas :/

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

11 juin 2011, 14:09

Bonjour et merci,

Je n'ai qu'un seul code et il fonctionne parfaitement, sauf chez Alice. Quand il y a des pièces jointes images (les pdf et autres doc passent), l'expéditeur ne reçoit pas du tout de copie... S'il n'y a pas de fichier joint, il reçoit la copie.

C'est certainement dans l'entête en effet, mais je ne vois pas où car chez Hotmail par exemple, ça passe sans problème.
/******************************
	* partie générale de l'en-tête
	******************************/
 
	$entete  = 'From: '.utf8_decode($nom).' '.utf8_decode($prenom).' <'.$email.'>' . "\r\n";
	$entete .= 'MIME-Version: 1.0'."\r\n";
	$entete .= 'Content-Type: text/html; charset=utf-8'."\r\n"; 

	/**********************************
	* En cas d'ajout d'un fichier joint
	***********************************/

	$fichier= $_FILES['fichierjoint']['tmp_name'];
	$taille = $_FILES['fichierjoint']['size'];
	$type = $_FILES['fichierjoint']['type'];
	$nomfichierjoint = $_FILES['fichierjoint']['name'];

/*******************************************************************************
	* On vérifie l'extension du fichier pour ne pas autoriser les fichiers à risques
	********************************************************************************/

	// Les extensions autorisées 
	$ExtensionsAutorisees = array('.gif','.jpg','.jpeg','.png','.doc','.pdf', '.GIF','.JPG','.JPEG','.PNG','.DOC','.PDF', '') ;

	// Extraction de l'extension
	$extension = strrchr($_FILES['fichierjoint']['name'], '.');

	// On verifie la présence d'une des extensions dans le nom du fichier
	if (!in_array($extension, $ExtensionsAutorisees))
	{
	$AutoriseFichier = "non";
	}

//Si une extension non désirée a été trouvée, on arrête l'envoi et on affiche un message d'erreur
	if($AutoriseFichier=="non")
	{
	echo '<p><strong><font color="#FF0000">V&eacute;rifiez le fichier que vous voulez joindre, son extension </font><font color="#0000FF">'.$extension.'</font><font color="#FF0000"> n\'est pas accept&eacute;e.</font></strong></p>'."\n";
	$message_erreur_formulaire = true;
	}
	else
	{
	// Si aucune des extensions n'a été trouvée, on continue...

		if ( !empty($nomfichierjoint)) 
		{
		// ajout d'un texte à la saisie signalant un fichier joint
		$messagepiecejointe .= "\n\n".'Ce courrier contient la pièce jointe : '.$nomfichierjoint."\n\n";
		// ouverture du fichier joint uploadé en lecture
		$f = fopen($fichier, "r") or die("ouverture du fichier $fichier impossible ...");
		// récupération du code du fichier joint
		$codefichier =fread($f, $taille);
		// encodage standard en base 64
		$codefichier = chunk_split(base64_encode($codefichier));

		/*******************************************************
		* dans le cas de l'envoi d'un fichier joint
		* il convient de séparer le corps du message du fichier
		* pour cela on utilise un identifiant de séparateur
		*******************************************************/

		// identifiant de séparateur, en principe unique
		$limite = md5(uniqid(time() ));

		/********************************************
		* composition de l'en-tête du message :
		* le message textuel suivi du code du fichier
		*********************************************/

		$entete .= 'Content-Type: multipart/mixed;boundary='.$limite."\r\n\r\n";
		$entete .= '--'.$limite."\r\n";
		$entete .= 'Content-transfer-encoding:8bit'."\r\n\r\n";
		// puis on rajoute la pièce jointe au message
		$messagefin .= '--'.$limite."\r\n";
		$messagefin .= 'Content-type:'.$type.';name='.$nomfichierjoint."\r\n";
		$messagefin .= 'Content-transfer-encoding:base64'."\r\n\r\n";
		$messagefin .= ''.$codefichier."\r\n";
		$messagefin .= '--'.$limite.'--';
		}   //fin ajout fichier joint
Voilà, si tu as une idée, elle est la bienvenue :D

Petit nouveau ! | 3 Messages

12 juin 2011, 16:42

Personne n'a une petite idée ? Je n'arrive pas à me débloquer...

Bon dimanche à tous :wink: