IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Piece jointe jpg to bin [Encodage]


Sujet :

Langage PHP

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 42
    Points : 258
    Points
    258
    Par défaut Piece jointe jpg to bin
    Bonjour,

    J'essaye d'effectué un envoi de pièce jointe via la fonction mail mais lorsque je reçois le mail la pièce jointe est un fichier .bin (part_2.bin).

    Voici le code du mail que j'ai paramétré grace à un turoriel de developpez.com

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    // To
    $to = 'EMAIL@DOMAINE.FR';
    // Subject
    $subject = 'MON SUJET';
    // clé aléatoire de limite
    $boundary = md5(uniqid(microtime(), TRUE));
    // Headers
    $headers = 'From: EMAIL@DOMAINE.FR'."\r\n";
    $headers .= 'Mime-Version: 1.0'."\r\n";
    $headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
    $headers .= "\r\n";
    // Message
    $msg = 'Texte affiché par des clients mail ne supportant pas le type MIME.'."\r\n\r\n";
    // Message HTML
    $msg .= '--'.$boundary."\r\n";
    $msg .= 'Content-type: text/html; charset=utf-8'."\r\n\r\n";
    $msg .= 'MESSAGE HTML'."\r\n";
    // Pièce jointe 1
    $file_name = 'image1.jpg';
    if (file_exists($file_name)){
    	$file_type = filetype($file_name);
    	$file_size = filesize($file_name);
    	$handle = fopen($file_name, 'r') or die('File '.$file_name.'can t be open');
    	$content = fread($handle, $file_size);
    	$content = chunk_split(base64_encode($content));
    	$f = fclose($handle);
    	$msg .= '--'.$boundary."\r\n";
    	$msg .= 'Content-type:'.$file_type.';name='.$file_name."\r\n";
    	$msg .= 'Content-transfer-encoding:base64'."\r\n\r\n";
    	$msg .= $content."\r\n";
    }
    // Fin
    $msg .= '--'.$boundary."\r\n";
    // Function mail()
    mail($to, $subject, $msg, $headers);
    A noté que le fichier jpg en question est volontairement placé au même endroit que le fichier qui execute ce script.

    Merci beaucoup

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 42
    Points : 258
    Points
    258
    Par défaut
    J'ai trouvé.

    Cette partie du tutoriel est un peut "foireuse" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $file_name = 'image.jpg';
    if (file_exists($file_name)){
    	$file_type = filetype($file_name);
    	$file_size = filesize($file_name);
     
    	$handle = fopen($file_name, 'r') or die('File '.$file_name.'can t be open');
    	$content = fread($handle, $file_size);
    	$content = chunk_split(base64_encode($content));
    	$f = fclose($handle);
     
    	$msg .= '--'.$boundary."\r\n";
    	$msg .= 'Content-type:'.$file_type.';name='.$file_name."\r\n";
    	$msg .= 'Content-transfer-encoding:base64'."\r\n\r\n";
    	$msg .= $content."\r\n";
    }
    La variable ($file_name) ne comporte que le nom du fichier et non le chemin, cela est sans doute suffisant lorsque le fichier se situe à la racine mais dans mon cas, le fichier se situe dans un dossier bien spécifique. La partie $msg .= 'Content-type:'.$file_type.';name='.$file_name."\r\n"; demande effectivement le nom du fichier (donc $file_name est nécessaire), en revanche en ce qui concerne les autres variables du même nom elles doivent comportées le chemin qui mène au fichier.

    Il me fallait donc créer une nouvelle variable avec le path exacte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $file_name = 'image.jpg';
    $file_directory = './public/invitation/'.$file_name;
    De fait j'ai pu utiliser ces deux variables correctement comme ceci et tout est rentré dans l'ordre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (file_exists($file_directory)){
    	$file_type = filetype($file_directory);
    	$file_size = filesize($file_directory);
    	$handle = fopen($file_directory, 'r') or die('File '.$file_directory.'can t be open');
    	$content = fread($handle, $file_size);
    	$content = chunk_split(base64_encode($content));
    	$f = fclose($handle);
    	$msg .= '--'.$boundary."\r\n";
    	$msg .= 'Content-type:'.$file_type.';name='.$file_name."\r\n";
    	$msg .= 'Content-transfer-encoding:base64'."\r\n\r\n";
    	$msg .= $content."\r\n";
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Mail piece jointe
    Par alexischmit dans le forum ASP.NET
    Réponses: 11
    Dernier message: 04/07/2005, 16h08
  2. envoi mail avec piece jointe fichier excel
    Par flogreg dans le forum ASP
    Réponses: 12
    Dernier message: 20/12/2004, 16h02
  3. [VB6] attacher un pièce jointe à un email via VB
    Par bytedigger dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 16/07/2004, 09h35
  4. piece jointe à mettre dans outlook
    Par Tierisa dans le forum VBA Access
    Réponses: 52
    Dernier message: 21/10/2003, 15h32
  5. Indy - email, html et piece jointe
    Par nut62 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 13/12/2002, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo