Rechercher : dans
Par :

PB PHP MAIL AVEC PIECE JOINTE

Dernière réponse le 28 jun 2009 à 12:19:23 saeeezz, le 27 jun 2009 à 18:06:54 
 Signaler ce message aux modérateurs

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
Configuration: Windows Vista
Firefox 3.0.11

Meilleures réponses pour « PB PHP MAIL AVEC PIECE JOINTE » dans :
[Langages] Envoyer un mail avec pièce jointe VoirLes mails, tout comme les pages web, sont livrés avec des en-têtes (headers en anglais). Ces en-têtes servent à donner quelques détails nécessaires comme l'adresse du destinataire, celle de l'envoyeur, la date de l'envoi, le sujet du mail etc. Elles...
Envoyer de gros fichiers (pièces jointes) par mail VoirLes systèmes de messagerie bloquent généralement les pièces jointes volumineuses, alors comment faire parvenir un fichier lourd (de plusieurs Mo) à son destinataire ? La solution consiste à utiliser un service d'hébergement temporaire de fichiers...
[Outlook Express] Pièces jointes impossibles à envoyer VoirSi Outlook Express ne peut pas envoyer les pièces jointes ajoutées à votre mail, ceci est probablement dû au fait qu'elles possèdent une taille trop volumineuse. Pour y remédier, la solution consiste à scinder les pièces jointes en plusieurs...

1

 saeeezz, le 28 jun 2009 à 12:19:23

Une idée ?

Répondre à saeeezz