8741 sujets

Développement web côté serveur, CMS

L'attachement dans une mail php ne fonctionne pas.
S'affichent le titre et le trombone dans la boite mail, mais...rien !
Où donc cela déconne-t-il ?
Si me dépanner est possible, grand merci d'avance !
Voici mon code :
$nomFichier = basename ($_FILES ["docAttache"]["name"]);
	$flAttachement = move_uploaded_file ($_FILES ["docAttache"]["tmp_name"],$nomFichier);
	if ($flAttachement)
	{
		$boundary = "-----------=".md5(uniqid(rand()));
		$header = "From: admin@informaticem.net\r\n";
		$header .= "MIME-Version: 1.0"."\r\n";
		$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
		$msg = "--".$boundary."\r\n";
		$msg .= "Content-Type: text/plain; charset= utf-8\r\n";
		$msg .= "Content-Transfer-Encoding: 8bit\r\n";
		$msg .= $message."\r\n";
		$msg .= "--".$boundary."--\r\n";
		//$header .= "Content-Type: multipart/form-data; boundary=\"$boundary\"\r\n";
		$attachement = file_get_contents ($nomFichier);
		
		$attachement = chunk_split (base64_encode ($attachement));
		$msg .= "Content-Type: image/jpeg; name=\"$nomFichier\"\r\n";
		$msg .= "Content-Transfer-Encoding: base64"."\r\n";
		$msg .= "Content-Disposition: attachment; filename=\"$nomFichier\"\r\n";
		$msg .= "\r\n";
		$msg .= $attachement."\r\n";
		$msg .= "--".$boundary."--\r\n";
		//$envoi = envoiMessageAttache ($destinataire,$titre,$msg,$adresse,$header);
		mb_send_mail ($destinataire,$titre,$msg,$header);
		echo "<script>alert('Message attaché envoyé');</script>";
     }

Modifié par _laurent (23 May 2024 - 23:18)
Que ça soit en C++ ou C#, ou php comme sur l'exemple, je vous conseille d'y aller pas à pas.
`\r\n` peuvent être remplacés par `\n`


$boundary = "-----------=".md5(uniqid(rand())); # je ne comprends pas ce pré-header ?
$header = "From: admin@informaticem.net\n";
$header .= "MIME-Version: 1.0"."\n";
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";

$nomFichier = basename ($_FILES ["docAttache"]["name"]);
	$flAttachement = move_uploaded_file ($_FILES ["docAttache"]["tmp_name"],$nomFichier);
	if ($flAttachement)
	{
		$msg = "--".$boundary."\r\n";
		$msg .= "Content-Type: text/plain; charset= utf-8\r\n";
		$msg .= "Content-Transfer-Encoding: 8bit\r\n";
		$msg .= $message."\r\n";
		$msg .= "--".$boundary."--\r\n";
		//$header .= "Content-Type: multipart/form-data; boundary=\"$boundary\"\r\n";
		$attachement = file_get_contents ($nomFichier);
		
		$attachement = chunk_split (base64_encode ($attachement));
		$msg .= "Content-Type: image/jpeg; name=\"$nomFichier\"\r\n";
		$msg .= "Content-Transfer-Encoding: base64"."\r\n";
		$msg .= "Content-Disposition: attachment; filename=\"$nomFichier\"\r\n";
		$msg .= "\r\n";
		$msg .= $attachement."\r\n";
		$msg .= "--".$boundary."--\r\n";
		mb_send_mail ($destinataire,$titre,$msg,$header);
		echo "<script>alert('Message attaché envoyé');</script>"; # non, vous êtes dans un script php3, vous ne pouvez pas echo les trucs, c'est inique ! [hum]
     }
Merci beaucoup pour la réponse !
Mais mon code ne donne toujours rien !
En fait, je pense que le problème n'est pas le code !
En effet, si j'isole la ligne :
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
je reçois le message dans ma boîte à lettres,
Avec le message, suivi du code Mime de l'image attachée.
Par contre, si je réinstaure la ligne,
je reçois systématiquement le message dans les spams,
Mais message vide, image attachée vide !
upload/1716644226-42820-spam.jpg
Probablement un blocage à l'envoi ?!
Merci encore ! (j'ai préféré solliciter le forum alsacréations plutôt que chat GPT !)
Modérateur
Hello,

Jette un coup d'oeil à cette librairie (phpmailer) et notamment cet exemple. Je t'avoue que ça fait un bail que je ne fais plus, l'envoie d'email à la main et ensuite, je ne développe plus vraiment en php. En outre, pour des besoins personnels, j'ai réutilisé cette librairie cet hiver.
Merci de vos réponses !
En fait, ce qui foirait tout, c'était la fonction mb_send_mail,
qu'il suffisait de remplacer par mail (tout simplement !)
Ouf !
Terrible de se retrouver face à un code qui ne marche pas !