PB PHP MAIL AVEC PIECE JOINTE

Fermé
saeeezz - 27 juin 2009 à 18:06
 saeeezz - 28 juin 2009 à 12:19
Bonjour,

J'ai un script php qui me permet d'envoyer un mail avec pièce jointe, le script fonctionne et envoie le mail ainsi que la pièce jointe mais le problème est le suivant :

Quand j'essaye d'ouvrir la pièce jointe elle fait 0 octet et me donne un message d'erreur du style : le fichier a été envoyé en tant que pièce jointe et n'a pas pu être décodé correctement...

Voici le script en question

<?php
// Couleur du texte des champs si erreur saisie utilisateur
$color_font_warn="#FF0000";
// Couleur de fond des champs si erreur saisie utilisateur
$color_form_warn="#FFCC66";
// Ne rien modifier ci-dessous si vous n’êtes pas certain de ce que vous faites !
if(isset($_POST['submit'])){
	$erreur="";
	// Nettoyage des entrées
	while(list($var,$val)=each($_POST)){
	if(!is_array($val)){
		$$var=strip_tags($val);
	}else{
		while(list($arvar,$arval)=each($val)){
				$$var[$arvar]=strip_tags($arval);
			}
		}
	}
	// Formatage des entrées
	$f_1=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_1)));
	$f_2=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_2)));
	$f_3=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_3)));
	$f_4=strip_tags(trim($f_4));
	// Verification des champs
	if(strlen($f_1)<2){
		$erreur.="<li><span class='txterror'>Le champ &laquo; Nom &raquo; est vide ou incomplet.</span>";
		$errf_1=1;
	}
	if(strlen($f_2)<2){
		$erreur.="<li><span class='txterror'>Le champ &laquo; Prénom &raquo; est vide ou incomplet.</span>";
		$errf_2=1;
	}
	if(strlen($f_4)<2){
		$erreur.="<li><span class='txterror'>Le champ &laquo; Email &raquo; est vide ou incomplet.</span>";
		$errf_4=1;
	}else{
		if(!ereg('^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+'.
		'@'.
		'[-!#$%&\'*+\/0-9=?A-Z^_`a-z{|}~]+\.'.
		'[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+$',
		$f_4)){
			$erreur.="<li><span class='txterror'>La syntaxe de votre adresse e-mail n'est pas correcte.</span>";
			$errf_4=1;
		}
	}
	if(strlen($f_5)<2){
		$erreur.="<li><span class='txterror'>Le champ &laquo; Message &raquo; est vide ou incomplet.</span>";
		$errf_5=1;
	}

	
	 //-----------------------------------------------
     //DECLARE LES VARIABLES
     //-----------------------------------------------

		$message_texte="Nom : ".$f_1."\n";
		$message_texte.="Prénom : ".$f_2."\n";
		$message_texte.="Société : ".$f_3."\n";
		$message_texte.="Email : ".$f_4."\n";
		$message_texte.="Message : ".$f_5."\n";
	 
     $email_expediteur=$f_4;
     $email_reply=$f_4;

     //-----------------------------------------------
     //GENERE LA FRONTIERE DU MAIL ENTRE TEXTE ET HTML
     //-----------------------------------------------

     $frontiere = '-----=' . md5(uniqid(mt_rand()));

     //-----------------------------------------------
     //HEADERS DU MAIL
     //-----------------------------------------------
	 $header = 'From: "'.$f_1.'" <'.$email_expediteur.'>'."\n";
	 $header .= 'Return-Path: <'.$email_reply.'>'."\n";
	 $header .= 'MIME-Version: 1.0'."\n";
	 $header .= 'Content-Type: multipart/mixed; boundary="'.$frontiere.'"';

     //-----------------------------------------------
     //MESSAGE TEXTE
     //-----------------------------------------------
	 $message = 'This is a multi-part message in MIME format.'."\n\n";
	 $message .= '--'.$frontiere."\n";
	 $message .= 'Content-Type: text/plain; charset="utf-8"'."\n";
	 $message .= 'Content-Transfer-Encoding:8bit'."\n\n";
	 $message .= $message_texte."\n\n";
	 $message .= '--'.$frontiere."\n";

     //-----------------------------------------------
     //PIECE JOINTE
     //-----------------------------------------------
	 
	 $fileName = $_FILES['cv']['name'];
	 $fileType = $_FILES['cv']['type'];
	 $fileSource = $_FILES['cv']['tmp_name'];

	 $message .= 'Content-Type:'.$fileType.'; name="'.$fileName.'"'."\n";
	 $message .= 'Content-Transfer-Encoding: base64'."\n";
	 $message .= 'Content-Disposition:attachement; filename="'.$fileName.'"'."\n\n";
	 $message .= chunk_split(base64_encode(file_get_contents($fileSource)))."\n";
	 
	 $message .= '--'.$frontiere.'--'."\n";
	 
		if($erreur==""){
		// Création du message
		$titre="MESSAGE DU SITE";
		if(mail('mail@wanadoo.fr',$titre,$message,$header)){
			$ok_mail="true";
		}else{
			$erreur.="<li><span class='txterror'>Une erreur est survenue lors de l'envoi du message, veuillez refaire une tentative.</span>";
		}
	}
}
?>


Si quelqu'un a une solution, je suis preneur car je cherche depuis des heures et mon niveau de programmation PHP est très limité ;)

Merci par avance
A voir également:

1 réponse

une idée ?
0