Email Pièce jointe PDF marche mais certains le recoivent crypté

Eliaos
Invité n'ayant pas de compte PHPfrance

18 déc. 2015, 17:08

Bonjour à tous,
Comme dit dans le sujet j'ai un code d'envoi de mail via php avec l'ajout d'un pdf en pièce jointe.
Tout marche parfaitement mais pour une raison inconnu certains ne reçoivent pas la pièce jointe mais un long texte crypté du style : "pz^:^p^;;^&'éà";;("^m'";&:^é....."
je vous mets mon code en dessous si vous voyait des erreurs peut être ces personnes utilisent internet explorer ou mac je ne sais pas

Merci d'avance à tous !
<?php
	$to = $email;
	$from_mail = "***"; //Expediteur  
	$from_name = "***"; //Votre nom, ou nom du site  
	$reply_to  = "***"; //Adresse de réponse  

	// Subject
	$subject = 'Test';
	 
	// clé aléatoire de limite
	$boundary = md5(uniqid(microtime(), TRUE));
	 
	// Headers
	$headers = 'From: ***'."\r\n";
	$headers .= "Reply-to: ***\n";  
	$headers .= 'Mime-Version: 1.0'."\r\n";
	$headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
	$headers .= "\r\n";
	 
	// Message
	$msg = 'This is a multipart/mixed message.'."\r\n\r\n";
	 
	// Texte
	$msg .= '--'.$boundary."\r\n";
	$msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
	$msg .= 'Content-transfer-encoding:8bit'."\r\n";
	$msg .= 'Cordialement'."\r\n";
	 
	$file_name = $idnomdevis.".pdf"; 
	$path = $_SERVER['DOCUMENT_ROOT']."\pdf\\";  
	$typepiecejointe = filetype($path.$file_name);  
	$content = chunk_split(base64_encode(file_get_contents($path.$file_name)) ); 

	$chaine = $email;
	 //\b, dans le masque, indique une limite de mot, de façon à ce que le mot
	 //"web" uniquement soit repéré, et pas seulement des parties de mots comme
	 // dans "webbing" ou "cobweb" 
	if (preg_match("/gmail/i", $chaine)) {
		//code pour gmail et autre
		$msg .= "\r\n";
		$msg .= '--'.$boundary."\r\n";
		$msg .= 'Content-type:'.$typepiecejointe.';name='.$file_name."\r\n";
		$msg .= 'Content-transfer-encoding:base64'."\r\n";
		$msg .= $content."\r\n";
		// Fin
		$msg .= '--'.$boundary."\r\n";
	} else {
		//code pour wanadoo
		$msg .= "\r\n";  
		$msg .= "--$boundary \r\n";  
		$msg .= "Content-Type: $typepiecejointe; name=\"$file_name\" \r\n";  
		$msg .= "Content-Transfer-Encoding: base64 \r\n";  
		$msg .= "\r\n";  
		$msg .= $content."\r\n";  
		$msg .= "\r\n";  
		$msg .= "--".$boundary."--"; 
	}

	//Envoi du mail
	if(mail($to, $subject, $msg, $headers)){ 
	?>
	<a href='Accueil.php'>retour &acirc la page d'accueil</a><br/><br/>
	<a href="pdf/<?php echo $idnomdevis;?>.pdf" target="_blank"><h4>Cliquez ici pour avoir directement votre devis au format PDF</h4></a><br/><br/>
	
	<?php
	}else {
	echo "Une erreur s'est produite, contactez nous <br/><a href='Accueil.php'>retour &acirc la page d'accueil</a>";
	} 
	
	}
	?>

Eléphant du PHP | 243 Messages

19 déc. 2015, 12:30

Bonjour,
Je pense que le problème vient de l'encodage. Pourrais-tu nous donner plus d'informations sur ces utilisateurs qui ont le problème ?
Par quel service d'émail passent-ils ?
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eliaos
Invité n'ayant pas de compte PHPfrance

21 déc. 2015, 10:54

Je vais leur demandé et je vous réponds dès que j'aurais plus de précision

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

21 déc. 2015, 11:19

Dans tous les cas ton code pour envoyer un mail est curieux...
Distinguer Wanadoo de Gmail à l'expédition, c'est absolument anormal, je ne sais pas d'où tu sors cette partie de code mais ça ne devrait pas exister.

La façon la plus simple pour envoyer un mail avec pièce jointe en limitant les soucis d'encodage, de type de fichier, etc... c'est de passer par une librairie type phpmailer qui saura gérer cela correctement.
Quand tout le reste a échoué, lisez le mode d'emploi...