Envoie de mail avec pièce jointe [Résolu] - Forum PHP

Envoie de mail avec pièce jointe Langages - Envoyer un mail avec pièce jointe » Conseils pratiques - PHP Envoyer un mail avec piece jointe sous vba [Résolu] (Résolu) » Forum - Bureautique Envoi de mail avec pièce jointe PDF (Résolu) » Forum - PHP Outlook-VBA envoie automatique mail avec piece jointe (Résolu) » Forum - Bureautique Envoi de mail avec pièces jointes.... (Résolu) » Forum - Outlook

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 ?

<?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:[email protected]" . $_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 } ?>


Forum

Envoie de mail avec pièce jointe Langages - Envoyer un mail avec pièce jointe » Conseils pratiques - PHP Envoyer un mail avec piece jointe sous vba [Résolu] (Résolu) » Forum - Bureautique Envoi de mail avec pièce jointe PDF (Résolu) » Forum - PHP Outlook-VBA envoie automatique mail avec piece jointe (Résolu) » Forum - Bureautique Envoi de mail avec pièces jointes.... (Résolu) » Forum - Outlook

Web: www.shapebootstrap.net

6 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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...)

 // 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); 

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour jordan,

Dest :

[email protected]

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.

Reply
réponses:
  • jordane45

    Au cas où tu ne l'aurais pas vu... j'avais fait quelques modifications dans le code... tu n'as fait que reprendre le tient visiblement....
    Essaye avec celui que je t'ai donné.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Pareil, j'ai toujours le texte de validation et le fichier dans le serveur, mais rien par mail ni dans les spam :

Dest :

[email protected]

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

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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 :

$_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)) {

Reply
réponses:
  • Sinistrus

    Ligne 40 :
    Remplacer :
    $Body.= "Content-Type: application/octet-stream; charset=\"ISO-8859-1\"".$passage_ligne;

    Par :
    $Body.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;

    Merci Jordan pour ton coup de pouce.

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed