Problème d'envoi pièce jointe sur outlook avec mail() php

Fermé
fabi00 Messages postés 82 Date d'inscription vendredi 4 février 2022 Statut Membre Dernière intervention 18 mars 2022 - 11 mars 2022 à 10:59
yg_be Messages postés 23349 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 novembre 2024 - 14 mars 2022 à 16:23
Bonjour,

Je demande à nouveau votre aide pour tenter de résoudre un dysfonctionnement lors de la réception du courrier de mon formulaire en Php.

Voici ce qui se passe, quand je soumets mon formulaire sur mon adresse Gmail tout est parfait, je reçois l'information ainsi que la pièce jointe. Ce qui est même plus que parfait, c'est que j'obtiens le courriel dans ma boîte de réception et non pas sous forme de pourriel. Je me dis "Chouette !", sauf qu'il ne faut jamais se réjouir trop vite.

Quand j'envoie le courrier sur Outlook, il est dans les spams, mais en plus il n'y a pas de pièce jointe.

Avez vous une idées du pourquoi ?

Merci d'avance.


Voici la partie de l'envoie du mail.
//Envoi du fichier
	 // Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
		  if (isset($_FILES['fichier']) AND $_FILES['fichier']['error'] == 0) {
			// Testons si le fichier n'est pas trop gros
			if ($_FILES['fichier']['size'] <= 1000000) {
			  // Testons si l'extension est autorisée
			  $infosfichier = pathinfo($_FILES['fichier']['name']);
			  $extension_upload = $infosfichier['extension'];
			  $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png', 'pdf');
			  if (in_array($extension_upload, $extensions_autorisees)) {
				// On peut valider le fichier et le stocker définitivement
				if (is_uploaded_file($_FILES['fichier']['tmp_name'])) {
				   echo "File ". $_FILES['fichier']['name'] ." téléchargé avec succès.\n";
				   
				  if(is_dir('uploads/')){
					if(is_writable('uploads/'))	{
					  if(move_uploaded_file($_FILES['fichier']['tmp_name'], 'uploads/' . $_FILES['fichier']['name'])){
						 echo "L'envoi vers le serveur a bien été effectué !";
						$_SESSION['fichier'] = 'uploads/' . $_FILES['fichier']['name'];
					  }else{
						echo "Erreur lors de l'upload du fichier vers " .  'uploads/' . $_FILES['fichier']['name']  ;
						var_dump($_FILES); 
						exit;
					  }
					} else {
					   echo ("Erreur: Le dossier n'a pas les droits en écriture");
					}
				  }else{
					echo "Erreur : dossier de destination manquant ou erreur dans le chemin !"; 
				  }             
				} else {
				   echo "Attaque possible par téléchargement de fichier : ";
				   echo "Nom du fichier : '". $_FILES['fichier']['tmp_name'] . "'.";
				}
				
			  }else{
				echo "Extension error ";
				exit;
			  }
			}else{
			  echo "Size Error !";      
			  exit;
			}
		  }
	
	// To
	$to = 'mon@adresse.com';
	
	//From
	$from = $_SESSION['email'];
	 
	// Subject
	$subject = 'Formulaire de devis - Test Mail';
	 
	// clé aléatoire de limite
	$boundary = md5(uniqid(microtime(), TRUE));
	 
	// Headers
	$headers .= 'Mime-Version: 1.0'. 'Date: '. date('r') . "\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 .= 'Information de la commande:'."\r\n"; 
	foreach($fields as $a => $b){ $msg .= sprintf("%20s: %s",$b,$_REQUEST[$a]) . "\r\n"; } 
	
	//=====Lecture et mise en forme de la pièce jointe
	$fichier1  = fopen('uploads/' . $_FILES['fichier']['name'], "r" );
	$attachement = fread($fichier1, filesize('uploads/' . $_FILES['fichier']['name']));
	$attachement = chunk_split(base64_encode($attachement));
	fclose($fichier1);
	
	$msg .= '--'.$boundary."\r\n";
	$msg .= 'Content-type:'.filetype($_FILES['fichier']['name']).';name='.$_FILES['fichier']['name']."\r\n";
	$msg .= 'Content-transfer-encoding:base64'."\r\n";
	$msg .= $attachement."\r\n";

	// Fin
	$msg .= '--'.$boundary."\r\n";
	 
	function validateEmail($email) {
	if(preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email))
	  return true;
	else
	  return false;
}
 
		//envoie du formulaire
		if(mail($to,$subject,$msg,$headers) && mail($from,$subject,$msg,$headers)){
			//header('Location: #');
			echo "<h6>Votre message a bien été envoyé !</h6>";
			$_SESSION = array();
			
		}
		else{ //non envoyer
			//header('Location: #');
			echo "<h6>Votre message n'a pas pu être envoyé !<h6>";
			$_SESSION = array();
		}
		//supprimer les fichiers uploadés pour ne pas encombrer inutilement le serveur
		unlink ("uploads/".$_FILES['fichier']['name']);
   }
A voir également:

3 réponses

yg_be Messages postés 23349 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 novembre 2024 Ambassadeur 1 554
14 mars 2022 à 16:23
Si Outlook classe ce courriel comme spam, c'est parce qu'ils s'en méfient.
Si tu marques ce courriel, quand tu le reçois, comme "non spam", cela aidera peut-être Outlook à moins se méfier de courriels similaires.
1
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
11 mars 2022 à 12:30
Bonjour,

Quand tu parles d'outlook, tu fais référence au site web de message outlook.com ... ou bien au LOGICIEL outlook présent sur ton ordinateur ??

Si c'est le logiciel ( et vu que ton mail fonctionne vers une adresse gmail.. ) il faut déjà regarder au niveau du paramétrage de ton logiciel.




0
fabi00 Messages postés 82 Date d'inscription vendredi 4 février 2022 Statut Membre Dernière intervention 18 mars 2022
11 mars 2022 à 13:21
Je fait référence au site de messagerie outlook.
0
yg_be Messages postés 23349 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 novembre 2024 1 554 > fabi00 Messages postés 82 Date d'inscription vendredi 4 février 2022 Statut Membre Dernière intervention 18 mars 2022
14 mars 2022 à 16:13
Ne peux-tu pas, dans la messagerie, le marquer comme "non spam"?
Cela fait-il apparaitre la pièce jointe?
0
fabi00 Messages postés 82 Date d'inscription vendredi 4 février 2022 Statut Membre Dernière intervention 18 mars 2022 > yg_be Messages postés 23349 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 novembre 2024
14 mars 2022 à 16:17
Oui quand je l'ajoute comme "non-spam" la pièce jointe s'affiche, mais ça serait bien qu'on reçoive en "non-spam" ou alors je dois préciser aux clients de regarder leurs boîtes spams...
0
fabi00 Messages postés 82 Date d'inscription vendredi 4 février 2022 Statut Membre Dernière intervention 18 mars 2022
14 mars 2022 à 15:48
Bon je me suis un peu renseigné, apparemment ça avoir avec les entêtes, mais ça me prend un peu la tête. Les explications sur le net me paraissent compliquées. Est-ce que mes entêtes vous paraissent bons ?
// To
	$to = 'mon@adresse.com';
	
	//From
	$from = $_SESSION['email'];
	 
	// Subject
	$subject = 'Formulaire de devis - Test Mail';
	 
	// clé aléatoire de limite
	$boundary = md5(uniqid(microtime(), TRUE));
	 
	// Headers
	$headers .= 'Mime-Version: 1.0'. 'Date: '. date('r') . "\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 .= 'Information de la commande:'."\r\n"; 
	foreach($fields as $a => $b){ $msg .= sprintf("%20s: %s",$b,$_REQUEST[$a]) . "\r\n"; } 
	
	//=====Lecture et mise en forme de la pièce jointe
	$fichier1  = fopen('uploads/' . $_FILES['fichier']['name'], "r" );
	$attachement = fread($fichier1, filesize('uploads/' . $_FILES['fichier']['name']));
	$attachement = chunk_split(base64_encode($attachement));
	fclose($fichier1);
	
	$msg .= '--'.$boundary."\r\n";
	$msg .= 'Content-type:'.filetype($_FILES['fichier']['name']).';name='.$_FILES['fichier']['name']."\r\n";
	$msg .= 'Content-transfer-encoding:base64'."\r\n";
	$msg .= $attachement."\r\n";

	// Fin
	$msg .= '--'.$boundary."\r\n";
	 
	function validateEmail($email) {
	if(preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email))
	  return true;
	else
	  return false;
}
 
		//envoie du formulaire
		if(mail($to,$subject,$msg,$headers) && mail($from,$subject,$msg,$headers)){
			//header('Location: #');
			echo "<h6>Votre message a bien été envoyé !</h6>";
			$_SESSION = array();
			
		}
		else{ //non envoyer
			//header('Location: #');
			echo "<h6>Votre message n'a pas pu être envoyé !<h6>";
			$_SESSION = array();
		}
		//supprimer les fichiers uploadés pour ne pas encombrer inutilement le serveur
		unlink ("uploads/".$_FILES['fichier']['name']);
   }
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
14 mars 2022 à 16:17
Dans le headers, il manque le FROM (attention à bien respecté la syntaxe et à utiliser une adresse mail qui a le même domaine que le site web )
1