PHP pièce jointe inutilisable
ar-web-ouest
-
jordane45 Messages postés 40050 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 40050 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
j'ai un gros soucis dans mon code je ne sais pas comment gérer le chemin de ma pièce jointe ce qui fait qu'a la réception du mail impossible d'ouvrir la pièce jointe.
Et le truc c'est que je ne veux pas avoir à upload l'image sur mon serveur avant de l'envoyer car si pour chaque client je dois faire upload l'image sa risque d'être compliqué.
Voici mon code :
<?php
if(isset($_POST["gotest"])){
echo "click ok";
$from = $_POST["from"];
$to = $_POST["to"];
$file = $_POST['file'];
if(!empty($from) && !empty($to)) {
$subject = 'le sujet';
$boundary = md5(uniqid(rand()));
$headers = 'From: ' . $from . "\r\n" .
'Reply-To: ' . $to . "\r\n" .
'MIME-Version: 1.0 ' . "\r\n" .
'Content-Type: multipart/form-data; boundary=' . $boundary . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$message = "--$boundary " . "\r\n";
$message .= "Content-Type: text/plain; charset= utf-8 \r\n";
$message .= "Content-Transfer-Encoding: 8bit \r\n";
$message .= "\r\n";
//$message .= $from . " test \r\n";
/*$mime_type = mime_content_type($file);
$file_binary = file_get_contents($file);
$finalpath = 'data:' . $mime_type . ';base64,' . base64_encode( $file_binary );*/
$join = file_get_contents($file, true);
$join .= chunk_split(base64_encode($join));
$message .= "--$boundary" . "\r\n";
$message .= "Content-Type: image/jpeg;name\"image\" \r\n";
$message .= "Content-Transfer-Encoding: base64 \r\n";
$message .= "Content-Disposition: inline; filename=\"image\" \r\n";
$message .= "\r\n";
$message .= $join . "\r\n";
$message .= "--$boundary--";
mail($to, $subject, $message, $headers);
}
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<div style="display: flex;">
<label for="from">email qui envoi :</label>
<input type="email" name="from">
</div>
<div style="display: flex;">
<label for="to">recevoir à l'email :</label>
<input type="email" name="to">
</div>
<div>
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
<input type="file" name="file" accept="image/jpeg,image/gif,image/png,application/pdf,image/x-eps">
</div>
<input type="submit" value="send" name="gotest">
</form>
</body>
</html>
merci d'avance pour votre aide
j'ai un gros soucis dans mon code je ne sais pas comment gérer le chemin de ma pièce jointe ce qui fait qu'a la réception du mail impossible d'ouvrir la pièce jointe.
Et le truc c'est que je ne veux pas avoir à upload l'image sur mon serveur avant de l'envoyer car si pour chaque client je dois faire upload l'image sa risque d'être compliqué.
Voici mon code :
<?php
if(isset($_POST["gotest"])){
echo "click ok";
$from = $_POST["from"];
$to = $_POST["to"];
$file = $_POST['file'];
if(!empty($from) && !empty($to)) {
$subject = 'le sujet';
$boundary = md5(uniqid(rand()));
$headers = 'From: ' . $from . "\r\n" .
'Reply-To: ' . $to . "\r\n" .
'MIME-Version: 1.0 ' . "\r\n" .
'Content-Type: multipart/form-data; boundary=' . $boundary . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$message = "--$boundary " . "\r\n";
$message .= "Content-Type: text/plain; charset= utf-8 \r\n";
$message .= "Content-Transfer-Encoding: 8bit \r\n";
$message .= "\r\n";
//$message .= $from . " test \r\n";
/*$mime_type = mime_content_type($file);
$file_binary = file_get_contents($file);
$finalpath = 'data:' . $mime_type . ';base64,' . base64_encode( $file_binary );*/
$join = file_get_contents($file, true);
$join .= chunk_split(base64_encode($join));
$message .= "--$boundary" . "\r\n";
$message .= "Content-Type: image/jpeg;name\"image\" \r\n";
$message .= "Content-Transfer-Encoding: base64 \r\n";
$message .= "Content-Disposition: inline; filename=\"image\" \r\n";
$message .= "\r\n";
$message .= $join . "\r\n";
$message .= "--$boundary--";
mail($to, $subject, $message, $headers);
}
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<div style="display: flex;">
<label for="from">email qui envoi :</label>
<input type="email" name="from">
</div>
<div style="display: flex;">
<label for="to">recevoir à l'email :</label>
<input type="email" name="to">
</div>
<div>
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
<input type="file" name="file" accept="image/jpeg,image/gif,image/png,application/pdf,image/x-eps">
</div>
<input type="submit" value="send" name="gotest">
</form>
</body>
</html>
merci d'avance pour votre aide
Configuration: Windows / Firefox 98.0
A voir également:
- PHP pièce jointe inutilisable
- Pièce d'identité - Accueil - Services publics
- 1 pièce jointe - Guide
- Pps piece jointe ✓ - Forum Réseaux sociaux
- Easy php - Télécharger - Divers Web & Internet
- Publipostage outlook avec pièce jointe pdf - Forum Word
1 réponse
Bonjour,
À l'avenir merci d'utiliser les balises de code pour poster du code sur le forum
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Et en ce qui concerne ta demande, que tu veuilles l'uploader ou non sur ton serveur... Le fichier ne se trouve pas dans la superglobal $_POST mais dans $_FILES et sera, par conséquent, forcément charger dans le répertoire temporaire de ton serveur.
Si vraiment tu veux éviter un chargement sur le serveur, il va te falloir lire le contenu de ton fichier en javascript et envoyer cette donnée via un input hidden dans ton formulaire.
À l'avenir merci d'utiliser les balises de code pour poster du code sur le forum
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Et en ce qui concerne ta demande, que tu veuilles l'uploader ou non sur ton serveur... Le fichier ne se trouve pas dans la superglobal $_POST mais dans $_FILES et sera, par conséquent, forcément charger dans le répertoire temporaire de ton serveur.
Si vraiment tu veux éviter un chargement sur le serveur, il va te falloir lire le contenu de ton fichier en javascript et envoyer cette donnée via un input hidden dans ton formulaire.