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 :

[Mail] mail avec pièce jointe


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Designer API
    Inscrit en
    Octobre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Designer API

    Informations forums :
    Inscription : Octobre 2003
    Messages : 280
    Par défaut [Mail] mail avec pièce jointe
    Bonjour,

    je cherche a envoyer un mail avec une piece jointe en php, sans passer par une classe. Le code que j'utilise marche tres bien si je le recupere depuis un webmail, mais si je le recupere depuis microsoft outlook, il ne comprend pas la pièce jointe, et il m'ecris les entetes directement dans le corps du message.

    Pourquoi j'ai ce problème ?

    mon code :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    //----------------------------------
    // Construction de l'entête
    //----------------------------------
    // On choisi généralement de construire une frontière générée aleatoirement
    // comme suit. (REM: je n'en connais pas la raison profonde)
    $boundary = "-----=".md5(uniqid(rand()));
     
    // Ici, on construit un entête contenant les informations
    // minimales requises.
    //	Version du format MIME utilisé
    $header = "MIME-Version: 1.0\r\n";
    //	Type de contenu. Ici plusieurs parties de type different "multipart/mixed"
    //	Avec un frontière définie par $boundary
    $header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
    $header .= "\r\n";
     
    //--------------------------------------------------
    // Construction du message proprement dit
    //--------------------------------------------------
     
    // Pour le cas, où le logiciel de mail du destinataire
    // n'est pas capable de lire le format MIME de cette version
    // Il est de bon ton de l'en informer
    // REM: Ce message n'apparaît pas pour les logiciels sachant lire ce format
    $msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";
     
    //---------------------------------
    // 1ère partie du message
    // Le texte
    //---------------------------------
    // Chaque partie du message est séparé par une frontière
    $msg .= "--$boundary\r\n";
     
    // Et pour chaque partie on en indique le type
    $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
    // Et comment il sera codé
    $msg .= "Content-Transfer-Encoding:8bit\r\n";
    // Il est indispensable d'introduire une ligne vide entre l'entête et le texte
    $msg .= "\r\n";
    // Enfin, on peut écrire le texte de la 1ère partie
    $msg .= "Ceci est un mail avec un fichier joint\r\n";
    $msg .= "\r\n";
     
    //---------------------------------
    // 2nde partie du message
    // Le fichier
    //---------------------------------
    // Tout d'abord lire le contenu du fichier
    //$file = "nom_du_fichier.jpg";
    $file = "piece.pdf";
    $attachment = file_get_contents($file);
    $attachment = chunk_split(base64_encode($attachment));
     
    // Ne pas oublier que chaque partie du message est séparé par une frontière
    $msg .= "--$boundary\r\n";
    $msg .= "Content-Type: application/pdf; name=\"$file\"\r\n";
    $msg .= "Content-Transfer-Encoding: base64\r\n";
    $msg .= "Content-Disposition: attachment; filename=\"$file\"\r\n";
    $msg .= "\r\n";
    $msg .= $attachment . "\r\n";
    $msg .= "\r\n\r\n";
     
    // voilà, on indique la fin par une nouvelle frontière
    $msg .= "--$boundary--\r\n";
     
    $destinataire = "abcdefgt@hotmail.xxx";
    $expediteur   = "abcdefgt@hotmail.xxx";
    $reponse      = $expediteur;
    echo "Ce script envoie un mail avec fichier attaché à $expediteur";
    mail($destinataire, "test avec fichier attaché", $msg,
         "Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header);

  2. #2
    Membre chevronné
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par défaut
    Je me doute que te dire de passer par une classe ne conviendra pas, néanmoins tu peux utiliser temporairement une classe et voir le header généré, histoire de comparer avec le tiens et voir ce qui ne va pas.

    Utilise PHPmailer par exemple : http://stephaneey.developpez.com/tut...php/phpmailer/
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  3. #3
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    Tu peux essayer de lire autrement ton fichier aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$handle = fopen($file_name, 'r') or die('File '.$file.'can\'t be open');
    	$content = fread($handle, $file_size);
    	$content = chunk_split(base64_encode($content));
    	$f = fclose($handle);

  4. #4
    Membre éclairé
    Homme Profil pro
    Designer API
    Inscrit en
    Octobre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Designer API

    Informations forums :
    Inscription : Octobre 2003
    Messages : 280
    Par défaut
    Merci pour vos reponses. J'ai esayer avec fread pareil ^^
    donc en attendant j'ai pris la class et je regarderais son code pour comprendre ou je foire

    Merci bien

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

Discussions similaires

  1. Envoyer mails automatiquement avec pièce jointe
    Par couriel dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 31/08/2012, 13h28
  2. e-mails automatiques avec pièce jointe
    Par touche_a_tout dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/02/2012, 10h20
  3. [HTA] SMTP Mail Client avec pièce jointe
    Par hackoofr dans le forum Vos Contributions VBScript
    Réponses: 6
    Dernier message: 24/11/2011, 20h25
  4. [Mail] problème mail html avec pièce jointe
    Par stars333 dans le forum Langage
    Réponses: 2
    Dernier message: 12/06/2007, 19h44
  5. [Mail] Problème avec pièce jointe
    Par coco38 dans le forum Langage
    Réponses: 4
    Dernier message: 27/04/2007, 10h14

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