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

fabi00 Messages postés 82 Statut Membre -  
yg_be Messages postés 24281 Statut Contributeur -
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 24281 Statut Contributeur Ambassadeur 1 584
 
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 40050 Statut Modérateur 4 753
 
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 Statut Membre
 
Je fait référence au site de messagerie outlook.
0
yg_be Messages postés 24281 Statut Contributeur 1 584 > fabi00 Messages postés 82 Statut Membre
 
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 Statut Membre > yg_be Messages postés 24281 Statut Contributeur
 
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 Statut Membre
 
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 40050 Statut Modérateur 4 753
 
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