[RESOLU] Problème envoie email avec fichier

Petit nouveau ! | 4 Messages

29 juin 2018, 11:22

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>

Avatar du membre
Eléphanteau du PHP | 30 Messages

29 juin 2018, 21:30

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 juin 2018, 23:12

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
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 4 Messages

30 juin 2018, 19:13

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:

Petit nouveau ! | 4 Messages

02 juil. 2018, 09:54

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é';
	}
	
	?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

02 juil. 2018, 10:29

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
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

02 juil. 2018, 10:32

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.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 4 Messages

02 juil. 2018, 11:03

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é