Page 1 sur 1

Problème envoie email avec fichier

Posté : 29 juin 2018, 11:22
par pyromain
Bonjour a tous,
j'ai un petit souci quand j'envoie un email je reçois l'email mais vide les fichier sont noter noname sans extension rien Image

et voici mon script des idée sur mon ou mes erreur
merci d'avance :D
<!DOCTYPE html>
<html>
	<head>
	<!--<meta http-equiv="refresh" content="20; url=be_a_model" />-->
	
	</head>
	<body>
	<?php 
	error_reporting(E_ALL);
	ini_set("display_errors", 1);
	$DESTINATAIRE = '[email protected]';
	if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $DESTINATAIRE))
	{
		$passage_ligne = "\r\n";
	}
	else
	{
		$passage_ligne = "\n";
	}
	
	//creation de la boudary(frontiere)
	$boundary = "-----=".md5(rand());
	$boundary_alt = "-----=".md5(rand());
	
	$name = $_POST['nom'];
	$email = $_POST['email'];
	$messageuser = $_POST['message'];
	$photo = $_FILES['photo']; //noms lier :  extension fileextension dossier attachement
	$photo2 = $_FILES['photo2']; //noms lier :  extension1 fileextension1 dossier1 attachement1
	
	$sujet = "candidature";


	
	
	
	
	
	$msg = 'de $name: \n $message .';
	$extensions = array('jpg', 'png', 'mov', 'mp4', 'pdf');
	$fileextension = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
	if(!in_array($fileextension, $extensions))
	{
		echo '<h1>erreur dans le type de fichier</h1>';
	}
	else
	{
		$dossier = 'upload/';
		$fichier = basename($_FILES['photo']['name']);
		if (move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier)) {
            //echo 'Upload effectué avec succès !';
			$files = fopen($dossier . $fichier, "r"); //on ouvre le fichier
			$attachement = fread($files, filesize($dossier . $fichier)); //on lit le fichier
			fclose($files); //et on referme le fichier
			unlink($dossier . $fichier); //le fichier a été lu donc on peut le supprimer
			$attachement = chunk_split(base64_encode($attachement)); //on encode le fichier en base64 et on le fait respecter la norme RFC 2045
			$file0name = $_FILES['photo']['name']; //on recupere le fichier pour redonner son noms
			$ifjpg = "jpg";
			$ifpng = "png";
			$ifmov = "mov";
			$ifmp4 = "mp4";
			$ifpdf = "pdf";
			if ($fileextension ==  $ifjpg)
			{
				$typefile = "image/jpeg";
				echo("jpg");
			}
			elseif ($fileextension == $ifpng)
			{
				$typefile = "image/png";
				echo("png");
			}
			elseif ($fileextension == $ifmov)
			{
				$typefile = "video/quicktime";
				echo("mov");
			}
			elseif ($fileextension == $ifmp4)
			{
				$typefile = "video/mp4";
				echo("mp4");
			}
			elseif ($fileextension == $ifpdf)
			{
				$typefile = "application/pdf";
				echo("pdf");
			}
			
		}
		else {
            echo 'Echec de l\'upload !';
        }
			
	}
	$extensions1 = array('jpg', 'png', 'mov', 'mp4', 'pdf');
	$fileextension1 = pathinfo($_FILES['photo2']['name'], PATHINFO_EXTENSION);
	if(!in_array($fileextension1, $extensions1)) //test de l'extension du fichier
	{
		echo '<h1>erreur dans le type de fichier</h1>'; //erreur de type de fichier
	}
	else //type de fichier valider
	{
		$dossier1 = 'upload/'; //dossier de copie du fichier
		$fichier1 = basename($_FILES['photo2']['name']); //photo2 devient fichier1
		if (move_uploaded_file($_FILES['photo2']['tmp_name'], $dossier1 . $fichier1)) { //on copie le fichier dans le dossier sous son noms original
            // echo 'Upload effectué avec succès !'; //fichier copier
			$files1 = fopen($dossier1 . $fichier1, "r"); //on ouvre le fichier
			$attachement1 = fread($files1, filesize($dossier1 . $fichier1)); //on lit le fichier
			fclose($files1); //et on referme le fichier
			unlink($dossier1 . $fichier1); //le fichier a été lu donc on peut le supprimer
			$attachement1 = chunk_split(base64_encode($attachement1)); //on encode le fichier en base64 et on le fait respecter la norme RFC 2045
			$file1name = $_FILES['photo2']['name']; //on recupere le fichier pour redonner son noms
			$ifjpg = "jpg";
			$ifpng = "png";
			$ifmov = "mov";
			$ifpdf = "pdf";
			$ifmp4 = "mp4";
			if ($fileextension1 ==  $ifjpg)
			{
				$typefile1 = "image/jpeg";
				echo(" jpg");
			}
			elseif ($fileextension1 == $ifpng)
			{
				$typefile1 = "image/png";
				echo(" png");
			}
			elseif ($fileextension1 == $ifmov)
			{
				$typefile1 = "video/quicktime";
				echo(" mov");
			}
			elseif ($fileextension1 == $ifmp4)
			{
				$typefile1 = "video/mp4";
				echo(" mp4");
			}
			elseif ($fileextension1 == $ifpdf)
			{
				$typefile1 = "application/pdf";
				echo(" pdf");
			}
			

			
		}
		else {
            echo 'Echec de l\'upload !'; //erreur de copie
        }
			
	}
	// echo '<p>' . $name . '</p>';
	// echo '<p>' . $email . '</p>';
	// echo '<p>' . $message . '</p>';
	//echo '<p>' . $attachement . '</p>';
	//echo '<p>' . $attachement1 . '</p>';
		//header de l'email
        	//$header = "From: <" . $email . ">" . $passage_ligne;
        	$header= "Reply-to: <" . $email . ">" . $passage_ligne;
        	$header.= "MIME-Version: 1.0" . $passage_ligne;
        	$header.= "X-priority : 3" . $passage_ligne;
        	$header.= "Content-Type: multipart/mixed;" . $passage_ligne . "boundary= " . $boundary . $passage_ligne;
	// echo '<p>' . $header . '</p>';
	
	//message de l'email
        	$message = $passage_ligne . "--" . $boundary_alt . $passage_ligne;
        	$message.= "Content-Type: text/html; charset= utf-8" . $passage_ligne;
        	$message.= "Content-Transfer-Encoding: 8bit" . $passage_ligne . $passage_ligne;
        	$message.= "<html><head></head><body><p>nom : $name</p> <p>email : $email</p><p>$messageuser</p></body></html>";
        	$message.= $passage_ligne . "--" . $boundary_alt . "--" . $passage_ligne;
	// echo '<p>' . $messageuser . '</p>';
	
			$message.= $passage_ligne. "---" . $boundary . $passage_ligne;
			$message.= "Content-Type: " . $typefile ."; name= " . $file0name . $passage_ligne; //on declare le fichier
			$message.= "Content-Transfer-Encoding: base64".$passage_ligne; //on lui dit qu'il a précedement été encodé en base64
			$message.= "Content-Disposition: attachment; filename= " . $file0name . $passage_ligne; //on lui dit que le fichier est un fichier joint et son nom
			$message.= $passage_ligne . $attachement . $passage_ligne . $passage_ligne; //on integre le fichier
			$message.= $passage_ligne. "---" . $boundary . $passage_ligne;
			$message.= "Content-Type: " .$typefile1 ."; name= " . $file1name . $passage_ligne; //on declare le fichier
			$message.= "Content-Transfer-Encoding: base64"; //on lui dit qu'il a précedement été encodé en base64
			$message.= "Content-Disposition: attachment; filename= " .$file1name . $passage_ligne; //on lui dit que le fichier est un fichier joint et son nom
			$message.= $passage_ligne . $attachement1 . $passage_ligne . $passage_ligne; //on integre le fichier
			$message.= $passage_ligne. "--" . $boundary . "--" . $passage_ligne;
			$message.= $passage_ligne. "--" . $boundary . "--" . $passage_ligne;
			// echo ("<p>" . $fichierterminer . "</p>");
			// echo ("<p>" . $fichierterminer1 . "</p>");
			
			echo($message);
			mail($DESTINATAIRE, $sujet, $message, $header);
	?>
	</body>
</html>

Re: Problème envoie email avec fichier

Posté : 29 juin 2018, 21:30
par Reka
Hello,

Essaie de mettre ceci aux endroits ad hoc :

Code : Tout sélectionner

$info = pathinfo($_FILES['userFile']['name']); $ext = $info['extension']; // get the extension of the file $newname = "newname.".$ext; $target = 'images/'.$newname; move_uploaded_file( $_FILES['userFile']['tmp_name'], $target);
cf https://stackoverflow.com/questions/350 ... sired-name

Re: Problème envoie email avec fichier

Posté : 29 juin 2018, 23:12
par @rthur
Mon conseil pour éviter tous les cas particulier un peu bizarre est d'utiliser une librairie PHP qui va gérer correctement la sécurité des envois en permettant que cela fonctionne avec la majorité des clients mails et webmails.

La lib la + utilisée pour faire cela est PHPmailer :
https://github.com/PHPMailer/PHPMailer

Il y a un exemple complet pour faire l'upload et l'envoi par mail d'un fichier et le code tient en une 10aine de lignes :
https://github.com/PHPMailer/PHPMailer/ ... pload.phps

Re: Problème envoie email avec fichier

Posté : 30 juin 2018, 19:13
par pyromain
Merci pour vos réponse, je vais essayer ce qu'@rthur ma dit d'essayer, si je n'y arrive pas j'essayerais ce que tu ma dit Reka :D :wink:

Re: Problème envoie email avec fichier

Posté : 02 juil. 2018, 09:54
par pyromain
Boujour a vous,
bon j'ai essayer d'utiliser PHP mailer mais je tombe sur une erreur HTTP 500 continuellement
voici mon code
des idée ?
	<?php 
	error_reporting(E_ALL);
	ini_set("display_errors", 1);
	
	use \PHPMailer\src\PHPMailer;
	
	$name = $_POST['nom'];
	$email = $_POST['email'];
	$messageuser = $_POST['message'];
	$photo = $_FILES['photo']; //noms lier :  extension fileextension dossier attachement
	$photo2 = $_FILES['photo2']; //noms lier :  extension1 fileextension1 dossier1 attachement1
	
	$sujet = "candidature";


	
	
	
	
	
	$msg = 'de $name: \n $message .';
	$extensions = array('jpg', 'png', 'mov', 'mp4', 'pdf');
	$fileextension = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
	if(!in_array($fileextension, $extensions))
	{
		echo '<h1>erreur dans le type de fichier</h1>';
	}
	else
	{
		$dossier = 'upload/';
		$fichier = basename($_FILES['photo']['name']);
		if (move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier)) {
            //echo 'Upload effectué avec succès !';
			$files = fopen($dossier . $fichier, "r"); //on ouvre le fichier
			$attachement = fread($files, filesize($dossier . $fichier)); //on lit le fichier
			fclose($files); //et on referme le fichier
			unlink($dossier . $fichier); //le fichier a été lu donc on peut le supprimer
			$attachement = chunk_split(base64_encode($attachement)); //on encode le fichier en base64 et on le fait respecter la norme RFC 2045
			$file0name = $_FILES['photo']['name']; //on recupere le fichier pour redonner son noms
			$ifjpg = "jpg";
			$ifpng = "png";
			$ifmov = "mov";
			$ifmp4 = "mp4";
			$ifpdf = "pdf";
			if ($fileextension ==  $ifjpg)
			{
				$typefile = "image/jpeg";
				echo("jpg");
			}
			elseif ($fileextension == $ifpng)
			{
				$typefile = "image/png";
				echo("png");
			}
			elseif ($fileextension == $ifmov)
			{
				$typefile = "video/quicktime";
				echo("mov");
			}
			elseif ($fileextension == $ifmp4)
			{
				$typefile = "video/mp4";
				echo("mp4");
			}
			elseif ($fileextension == $ifpdf)
			{
				$typefile = "application/pdf";
				echo("pdf");
			}
			
		}
		else {
            echo 'Echec de l\'upload !';
        }
			
	}
	$extensions1 = array('jpg', 'png', 'mov', 'mp4', 'pdf');
	$fileextension1 = pathinfo($_FILES['photo2']['name'], PATHINFO_EXTENSION);
	if(!in_array($fileextension1, $extensions1)) //test de l'extension du fichier
	{
		echo '<h1>erreur dans le type de fichier</h1>'; //erreur de type de fichier
	}
	else //type de fichier valider
	{
		$dossier1 = 'upload/'; //dossier de copie du fichier
		$fichier1 = basename($_FILES['photo2']['name']); //photo2 devient fichier1
		if (move_uploaded_file($_FILES['photo2']['tmp_name'], $dossier1 . $fichier1)) { //on copie le fichier dans le dossier sous son noms original
            // echo 'Upload effectué avec succès !'; //fichier copier
			$files1 = fopen($dossier1 . $fichier1, "r"); //on ouvre le fichier
			$attachement1 = fread($files1, filesize($dossier1 . $fichier1)); //on lit le fichier
			fclose($files1); //et on referme le fichier
			unlink($dossier1 . $fichier1); //le fichier a été lu donc on peut le supprimer
			$attachement1 = chunk_split(base64_encode($attachement1)); //on encode le fichier en base64 et on le fait respecter la norme RFC 2045
			$file1name = $_FILES['photo2']['name']; //on recupere le fichier pour redonner son noms
			$ifjpg = "jpg";
			$ifpng = "png";
			$ifmov = "mov";
			$ifpdf = "pdf";
			$ifmp4 = "mp4";
			if ($fileextension1 ==  $ifjpg)
			{
				$typefile1 = "image/jpeg";
				echo(" jpg");
			}
			elseif ($fileextension1 == $ifpng)
			{
				$typefile1 = "image/png";
				echo(" png");
			}
			elseif ($fileextension1 == $ifmov)
			{
				$typefile1 = "video/quicktime";
				echo(" mov");
			}
			elseif ($fileextension1 == $ifmp4)
			{
				$typefile1 = "video/mp4";
				echo(" mp4");
			}
			elseif ($fileextension1 == $ifpdf)
			{
				$typefile1 = "application/pdf";
				echo(" pdf");
			}
			

			
		}
		else {
            echo 'Echec de l\'upload !'; //erreur de copie
        }
			
	}
        require "PHPMailer\class.PHPMailer.php";
	$mail = new PHPMailer;
	$mail->addAddress('[email protected] ', 'email');
	$mail->Subject = $sujet;
	$mail->Body = $messageuser;
	$mail->addAttachment($attachement, 'fichier 1');
	$mail->addAttachment($attachement1, 'fichier 2');
	if(!$mail->send())
	{
		echo 'echec de l envoie';
	}
	else
	{
		echo 'envoie effectué';
	}
	
	?>

Re: Problème envoie email avec fichier

Posté : 02 juil. 2018, 10:29
par @rthur
Regarde dans les logs de ton serveur pour connaitre le message d'erreur.
Pour savoir où est le fichier de log, fait un phpinfo() et regarde la ligne error_log.

A défaut, c'est de la bidouille, mais tu peux aussi commenter des blocs de ton code progressivement pour savoir à quel moment ça bloque

Re: Problème envoie email avec fichier

Posté : 02 juil. 2018, 10:32
par @rthur
A mon avis tu as au moins un problème lors de ton appel à $mail->addAttachment(), regarde bien l'exemple de ce que tu dois fournir comme paramètre.

Re: Problème envoie email avec fichier

Posté : 02 juil. 2018, 11:03
par pyromain
j'ai plus l'erreur HTTP mais une erreur de classe, il ne trouve pas la classe PHPmailer :(

sinon je n'ai aucun log d'erreur phpinfo me dit no value pour error_log

EDIT: j'ai plus le souci mais maintenant que des échec d'envoi donc me reste plus qu'a trouver pourquoi mais je pense que sa ne sera pas trop complexe de ce coté