Envoie de mail avec pièce jointe
Résolu
Sinistrus
Messages postés
1010
Date d'inscription
Statut
Membre
Dernière intervention
-
Sinistrus Messages postés 1010 Date d'inscription Statut Membre Dernière intervention -
Sinistrus Messages postés 1010 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je rencontre un soucis avec l'envoie de mon mail avec pièces jointes...
Je ne reçois aucun message d'erreur, au contraire le mail dit être parti mais non, je ne reçois rien.
Le soucis est survenue quand j'ai ajouté le script pour gérer les pièces jointes.
Pouvez-vous m'aider svp ?
Je rencontre un soucis avec l'envoie de mon mail avec pièces jointes...
Je ne reçois aucun message d'erreur, au contraire le mail dit être parti mais non, je ne reçois rien.
Le soucis est survenue quand j'ai ajouté le script pour gérer les pièces jointes.
Pouvez-vous m'aider svp ?
<?php $_F = '-----=' . md5(uniqid(mt_rand())); $_N = "\n"; if (isset($_POST['Envoyer'])) { foreach ($_POST as $var => $val) { if (!is_array($val)) { $$var = strip_tags($val); } else { while (list($arvar, $arval) = each($val)) { $$var[$arvar] = strip_tags($arval); } } } $_D = "_fichiers/"; @mkdir($_D0, 0777, true); $_E = array( '.doc', '.docx', '.pdf', '.txt' ); $_M = 52428800; $Fr_File = !empty($_FILES['Fr_Importer']) ? $_FILES['Fr_Importer'] : NULL; if (!in_array(strrchr($Fr_File['name'], '.'), $_E)) { $ERREUR .= "Vous devez uploader un fichier de type doc, docx ou pdf..."; } if ($Fr_File['size'] > $_M) { $ERREUR .= "La taille maximale du fichier ne doit pas dépasser 50Mo"; } if (!move_uploaded_file($Fr_File['tmp_name'], $_D . $Fr_File['name'])) { $ERREUR .= "Erreur lors de l'upload du fichier."; } else { $Fr_File['name'] = $_D . $Fr_File['name']; } if (file_exists($Fr_File['name'])) { $file = fopen($Fr_File['name'], "r"); $contents = fread($file, filesize($Fr_File['name'])); $encoded_attach = chunk_split(base64_encode($contents)); fclose($file); } if ($ERREUR == "") { $Sujet = "Mon objet"; // Entête du message $Header = "From:monmail@mail.com" . $_N; $Header .= 'MIME-Version: 1.0' . $_N; $Header .= 'Content-Type: multipart/mixed; boundary=' . $_F . $_N; $Header .= '--' . $_F . $_N; // Première pièce jointe $Header .= "Content-type: {\"application/octet-stream\"}; name=" . $Fr_File['name'] . $_N; $Header .= "Content-Length:" . filesize($Fr_File['name']) . $_N; $Header .= "Content-transfer-Encoding: BASE64" . $_N; $Header .= "Content-disposition: attachment; filename=" . $Fr_File['name'] . $_N; $Header .= $encoded_attach . '--' . $_F . $_N; // Encodage pour le HTML $Header .= "Content-Type: text/html; charset=\"ISO-8859-1\"" . $_N; $Header .= "Content-Transfer-Encoding: 8bit" . $_N; $Body = nl2br($Fr_Message); if (mail($DESTINATION, stripslashes($Sujet), stripslashes($Body), $Header)) { $MAIL_OK = "true"; } else { $ERREUR .= $CONTACT_MAIL_NO; } } } ?> <?php if ($MAIL_OK == "true") { echo "Mail envoyé avec succès"; } else { ?> <form id="Form" name="Form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data" > <?php if ($ERREUR) { echo "Message d'erreur"; } ?> <input type="file" class="custom-file-input" id="Fr_Importer" name="Fr_Importer" multiple> <br> <textarea name="Fr_Message" required id="Fr_Message"><?php echo $Fr_Message; ?></textarea> <br> <button class="btn btn-primary btn-lg" name="Envoyer" type="submit">Envoyer</button> </form> <?php } ?>
A voir également:
- Envoie de mail avec pièce jointe
- Pièce d'identité - Accueil - Services publics
- 1 pièce jointe - Guide
- Publipostage mail - Accueil - Word
- Windows live mail - Télécharger - Mail
- Envoyer un mail avec accusé de reception gmail - Guide
4 réponses
Bonjour,
Commence par faire un ECHO de tes différentes variables ($DESTINATION, stripslashes($Sujet), stripslashes($Body), $Header) pour voir si elles sont conformes à ce que tu penses....
Pense aussi à regarder dans ton dossier SPAM au cas où et/où à tester sur une autre boite mail.
Par contre, le code pour les PJ.. ça se met dans le body et pas le header non ? (je ne sais pas si ça fonctionne dans le header...)
Commence par faire un ECHO de tes différentes variables ($DESTINATION, stripslashes($Sujet), stripslashes($Body), $Header) pour voir si elles sont conformes à ce que tu penses....
Pense aussi à regarder dans ton dossier SPAM au cas où et/où à tester sur une autre boite mail.
Par contre, le code pour les PJ.. ça se met dans le body et pas le header non ? (je ne sais pas si ça fonctionne dans le header...)
// Première pièce jointe $Body = "Content-Type: application/octet-stream; name=" . basename($Fr_File['name']) . $_N; $Body .= "Content-Length:" . filesize($Fr_File['name']) . $_N; $Body .= "Content-disposition: attachment; filename=" . basename($Fr_File['name']) . $_N; $Body .= "Content-transfer-Encoding: base64\n\n"; $Body .= $encoded_attach . '--' . $_F . $_N; $Body .= nl2br($Fr_Message);
Bonjour jordan,
Dest :
Suje :
Body :
Header :
Rien dans les spams, et j'ai tenté le coup aussi avec les
Dest :
mail@mail.com
Suje :
Lorem ipsum
Body :
Content-type: {"application/octet-stream"}; name=_fichiers/aaa.txt Content-Length:11 Content-transfer-Encoding: BASE64 Content-disposition: attachment; filename=_fichiers/aaa.txt VGVzdCBy6XVzc2k= -------=531aade08d58129d691f783645146ce3 Content-Type: text/html; charset="ISO-8859-1" Content-Transfer-Encoding: 8bit
Lorem ipsum
Header :
From:Lorem ipsum MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=-----=531aade08d58129d691f783645146ce3 -------=531aade08d58129d691f783645146ce3
Rien dans les spams, et j'ai tenté le coup aussi avec les
$body.=, aucune erreur, message de validation, fichier uploadé sur le serveur mais aucun mail.
Pareil, j'ai toujours le texte de validation et le fichier dans le serveur, mais rien par mail ni dans les spam :
Dest :
Suje :
Body :
Head :
Dest :
mail@mail.com
Suje :
Lorem ipsum
Body :
Content-Type: application/octet-stream; name=aaa.txt Content-Length:11 Content-disposition: attachment; filename=aaa.txt Content-transfer-Encoding: base64 VGVzdCBy6XVzc2k= -------=d3267b8abeaa6c4cc847c4a3bdd615f0
Lorem ipsum
Head :
From:Lorem ipsum MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=-----=d3267b8abeaa6c4cc847c4a3bdd615f0 -------=d3267b8abeaa6c4cc847c4a3bdd615f0
Après avoir cherché un peu partout je suis tombé sur un article d'openclassrooms
(https://openclassrooms.com/fr/courses/1156346-e-mail-envoyer-un-e-mail-en-php)
J'ai suivi les instructions (je crois) :
- Je reçois la pièce jointe conforme (maintenant)
- Je reçois un fichier supplémentaire "mime-attachment"( je ne sais pourquoi)
- Le corps du mail est quand à lui "vide"...
Voici le code en question et merci encore pour ton aide :
(https://openclassrooms.com/fr/courses/1156346-e-mail-envoyer-un-e-mail-en-php)
J'ai suivi les instructions (je crois) :
- Je reçois la pièce jointe conforme (maintenant)
- Je reçois un fichier supplémentaire "mime-attachment"( je ne sais pourquoi)
- Le corps du mail est quand à lui "vide"...
Voici le code en question et merci encore pour ton aide :
$_Folder = "_fichiers/"; @mkdir ($_Folder,0777,true); $_Extent = array('.doc','.docx','.pdf','.txt'); $_Maxims = 52428800; $Fr_File = !empty($_FILES['Fr_Importer']) ? $_FILES['Fr_Importer'] : NULL; if(!in_array(strrchr($Fr_File['name'], '.'), $_Extent)) { $ERREUR.="Vous devez uploader un fichier de type doc, docx ou pdf..."; } if ($Fr_File['size'] > $_Maxims) { $ERREUR.="La taille maximale du fichier ne doit pas dépasser 2Mo"; } if (!move_uploaded_file($Fr_File['tmp_name'], $_Folder.$Fr_File['name'])) { $ERREUR.="Erreur lors de l'upload du fichier."; } else { $Fr_File['name'] = $_Folder.$Fr_File['name']; } if(file_exists($Fr_File['name'])) { $fichier = fopen($Fr_File['name'], "r"); $attachement = fread($fichier, filesize($Fr_File['name'])); $attachement = chunk_split(base64_encode($attachement)); fclose($fichier);} $boundary = "-----=".md5(rand()); $boundary_alt = "-----=".md5(rand()); $Sujet = $Fr_Objet; $Header = "From: \"".$Fr_Nom."\"<".$Fr_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; $Body = $passage_ligne."--".$boundary.$passage_ligne; $Body.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne; $Body.= $passage_ligne."--".$boundary_alt.$passage_ligne; $Body.= "Content-Type: application/octet-stream; charset=\"ISO-8859-1\"".$passage_ligne; $Body.= "Content-Transfer-Encoding: 8bit".$passage_ligne; $Body.= $passage_ligne; $Body.= nl2br($Fr_Message); $Body.= $passage_ligne; $Body.= $passage_ligne."--".$boundary_alt."--".$passage_ligne; $Body.= $passage_ligne."--".$boundary.$passage_ligne; $Body.= "Content-Type: application/octet-stream; name=".basename($Fr_File['name']).$passage_ligne; $Body.= "Content-Length:".filesize($Fr_File['name']).$passage_ligne; $Body.= "Content-Transfer-Encoding: base64".$passage_ligne; $Body.= "Content-Disposition: attachment; filename=".basename($Fr_File['name']).$passage_ligne; $Body.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne; $Body.= $passage_ligne."--".$boundary."--".$passage_ligne; if(mail($DESTINATION, stripslashes(utf8_decode($Sujet)), stripslashes(utf8_decode($Body)), $Header)) {