Partage
  • Partager sur Facebook
  • Partager sur Twitter

Php mail() envoyer une pièce jointe

FEDORA 39 - ssmtp

    11 avril 2024 à 19:01:43

    Bonjour à tous.

    J'essaie en vain d'envoyer un mail avec une pièce jointe via ce script PHP :

    ...	
    $message .= "\r\n--" . $boundary . "\r\n"; 
    $message .= "Content-type:application/pdf"."\r\n"; 	
    $message .= "Content-Transfer-Encoding: base64"."\r\n"; 	
    $message .= "Content-Disposition: attachment; filename=truc.pdf"."\r\n\r\n"; 
    
    $message .= chunk_split(base64_encode(file_get_contents('truc.pdf')))."\r\n"; 
    $message .= "\r\n--" . $boundary . "--"; 
    
    $mail_sent = @mail($to, $subject, $message, $headers); 
    
    echo $mail_sent ? "<center><h2><br />Message + pièce jointe envoyés !</h2></center>" :"Echec !";

    Ce code me renvoie systématiquement "Echec !"

    Si je supprime 'chunk_split', je reçois le message avec la pièce jointe mais le fichier est corrompu. Impossible de l'ouvrir.

    Il semblerait qu'il y ait une erreur d'encodage.

    Qu'en pensez-vous ?



    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2024 à 8:58:34

      Bonjour, 

      c'est quoi $boundary et quels sont les headers ?

      Pour info PHPMailer (par exemple) est laaaargement plus simple à gérer

      • Partager sur Facebook
      • Partager sur Twitter
        12 avril 2024 à 9:55:45

        Voici le script complet :

        <?php
        
                $to = 		"manquit@gmail.com"; 
        	$subject = 	"Essai mail PHP"; 
        	$msg=		"Voici le message";
        	$file_name = 	"truc.pdf";
        	$file_type = 	"application/pdf";
        
        	
        	$boundary = md5(uniqid(time()));
        
        	$headers =  "MIME-Version: 1.0\r\n";
        	$headers .= "From: <webmaster@calypsum.com>\r\n";
        	$headers .= "Content-Type: multipart/mixed; boundary=" . $boundary . "\r\n";
                $headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";	
         
        	$message = "\r\n--" . $boundary . "\r\n"; 
        	$message .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
        	
        	$message .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
        
        	$message .= $msg."\r\n";
        	$message .= "";
        
        	// ------------------------------------------------------------------
        	$message .= "\r\n--" . $boundary . "\r\n"; 
        	$message .= "Content-type:".$file_type."\r\n"; 				// ==> JPEG
        	$message .= "Content-Transfer-Encoding: base64"."\r\n"; 	
        	$message .= "Content-Disposition: attachment; filename=".$file_name."\r\n\r\n"; 
        
        	$message .= chunk_split(base64_encode(file_get_contents($file_name)))."\r\n";    // <========== CA MERDE !!!!
        	$message .= "\r\n--" . $boundary . "--"; 
        
        	$mail_sent = @mail($to, $subject, $message, $headers); 
        
        	echo $mail_sent ? "<center><h2><br />Message + pièce jointe envoyés !</h2></center>" :"Echec !";
        	
        ?>

        Mon site tourne sous Fedora server 39. J'ai essayé d'installé PHPMailer mais j'ai capitulé devant l'exercice. Si tu as un tuto simple pour l'installation, je prends !

        • Partager sur Facebook
        • Partager sur Twitter
          12 avril 2024 à 10:24:22

          Euh je viens d'essayer ton code en local via sfr:25, en changeant expéditeur, destinataire et le fichier, c'est tout, ben ça marche impec. 

          Faut investiguer o_O

          -
          Edité par GBNet 12 avril 2024 à 10:34:45

          • Partager sur Facebook
          • Partager sur Twitter
            12 avril 2024 à 11:25:22

            Salut

            Est-ce que $file_name est correct, par rapport au système de fichiers là où tu testes ?

            • Partager sur Facebook
            • Partager sur Twitter
              12 avril 2024 à 11:46:56

              GBNet a écrit:

              Euh je viens d'essayer ton code en local via sfr:25, en changeant expéditeur, destinataire et le fichier, c'est tout, ben ça marche impec. 

              Faut investiguer o_O

              -
              Edité par GBNet il y a environ 1 heure


              Etrange !

              Bon, sur tes conseils, je viens (enfin !) d'installer PHPMailer. C'est tout de même une belle galère en passant par Composer ... Mais ça tourne et les mails avec pièces jointes sont correctement envoyées et reçues.

              Merci encore :honte:

              • Partager sur Facebook
              • Partager sur Twitter

              Php mail() envoyer une pièce jointe

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown