Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 30/12/2012, 11h31   #1
beegees
Membre Expert
 
Avatar de beegees
 
Homme David Non communiqué
Développeur Web
Inscription : mars 2004
Messages : 3 348
Détails du profil
Informations personnelles :
Nom : Homme David Non communiqué
Âge : 38
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : Enseignement

Informations forums :
Inscription : mars 2004
Messages : 3 348
Points : 1 220
Points : 1 220
Par défaut Envoyer un email avec attaché

Bonjour à tous,

J'aimerais envoyer un email avec un attaché, l'email est correctement envoyé, mais l'attaché n'est pas présent.

Voici le code qui concerne l'attaché :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php
//=====Lecture et mise en forme de la pièce jointe.
    $fichier   = fopen($_SESSION['$path'],"r");
    $attachement = fread($fichier, filesize($_SESSION['$path']));
    $attachement = chunk_split(base64_encode($attachement));
    fclose($fichier);
    $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$fichier\"\n" . 
    "Content-Disposition: attachment;\n" . " filename=\"$fichier\"\n" . 
    "Content-Transfer-Encoding: base64\n\n" . $attachement . "\n\n";
    $message .= "--{$mime_boundary}\n";
    //==========
?>
Je n'ai aucune erreur lors de l'envoi, mais pas d’attaché. J'ai l'impression que l'attaché est dans le mail :

Citation:
Content-Type: {"application/octet-stream"}; name="Resource id #8" Content-Disposition: attachment; filename="Resource id #8" Content-Transfer-Encoding: base64 /9j/4AAQSkZJRgABAQEAtAC0AAD/4TlMRXhpZgAATU0AKgAAAAgACwEPAAIAAAAKAAAIngEQAAIA AAAJAAAIqAESAAMAAAABAAEAAAExAAIAAAAKAAAIsgEyAAIAAAAUAAAIvAITAAMAAAABAAIAAIdp AAQAAAABAAAI0MSlAAcAAADQAAA3tMbSAAcAAABAAAA4hMbTAAcAAACAAAA4xOocAAcAAAgMAAAA kgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAFBhbmFzb25pYwBETUMtRlozOAAAVmVyLjEuMCAgADIwMTA6MDk6MjMgMTA6 MTg6NTYAACaCmgAFAAAAAQAAEqqCnQAFAAAAAQAAErKIIgADAAAAAQACAACIJwADAAAAAQGQAACQ AAAHAAAABDAyMjGQAwACAAAAFAAAErqQBAACAAAAFAAAEs6RAQAHAAAABAECAwCRAgAFAAAAAQAA EuKSBAAFAAAAAQAAEuqSBQAFAAAAAQAAEvKSBwADAAAAAQAFAACSCAADAAAAAQAAAACSCQADAAAA AQAQAACSCgAFAAAAAQAAEvqSfAAHAAAklAAAEwKSkQACAAAAAzAwAACSkgACAAAAAzAwAACgAAAH a/r0enKdA8eeAYBHovivw/O73On65axg4iW7juDK8W1DDKZYmRHRhUYnDY+pF4mU1bSLilZ305XJ 396yi1GTV1drS+umNhgsFSVCOqu2m3fTXmUV0bbTaVk7J200/9k= --
Je me demandais si il ne manquait pas quelques lignes de codes dans le bloc ci-dessus ?


Merci d'avance et bonnes fêtes.

bee
__________________
beegees est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 00h53   #2
shell13010
Membre confirmé
 
Avatar de shell13010
 
Homme kyle debasa
Étudiant
Inscription : mars 2008
Messages : 266
Détails du profil
Informations personnelles :
Nom : Homme kyle debasa
Âge : 28
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : Distribution

Informations forums :
Inscription : mars 2008
Messages : 266
Points : 247
Points : 247
Session te retourne quoi?

Car d'après se que je vois tu appels juste le chemin et a aucun moment tu appel le fichier...
__________________
"Quelle prétention de prétendre que l'informatique est récente: Adam et Eve avaient déjà un Apple!"
shell13010 est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 01/01/2013, 19h00   #3
ok.Idriss
Responsable Modération

 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 3 799
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 3 799
Points : 12 147
Points : 12 147
Bonsoir.

Je relève déjà une erreur dans l'entête du mail :

Code :
$message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$fichier\"\n"
Ici $fichier n'est pas le nom du fichier

Pareil ici :

Code :
"Content-Disposition: attachment;\n" . " filename=\"$fichier\"\n"
Après le content-type aussi lui ne me semble pas correcte. Là ton mail est composé de plusieurs éléments avec chacun leur type MIME respectif (le corps du mail et le fichier attaché ont deux MIME-type distincts). Et de mémoire t'as un type MIME "multipart/mixed" qui permet de définir une suite d'éléments.

Tu as un exemple un moment donné dans le man PHP : http://php.net/manual/fr/function.mail.php

Il me semble qu'il existe aussi une lib PEAR de plus haut niveau pour gérer ce genre de chose plus simplement. D'ailleurs le man le mentionne également :

Citation:
Envoyé par man PHP
Si vous prévoyez d'envoyer des mails HTML ou autrement plus complexes, il est recommandé d'utiliser le paquet PEAR » PEAR::Mail_Mime.
Et comme je suis gentil, je te donne même la doc vers cette lib : http://pear.php.net/package/Mail_Mime/docs

Bonne année,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/01/2013, 19h23   #4
beegees
Membre Expert
 
Avatar de beegees
 
Homme David Non communiqué
Développeur Web
Inscription : mars 2004
Messages : 3 348
Détails du profil
Informations personnelles :
Nom : Homme David Non communiqué
Âge : 38
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : Enseignement

Informations forums :
Inscription : mars 2004
Messages : 3 348
Points : 1 220
Points : 1 220
Bonsoir à vous deux,

Merci pour vos réponses.

J'ai finalement repris tout de zéro et cela fonctionne maintenant très bien.

@Idriss: je prends bonne note de tes remarques (PEAR...).

Je vous remercie encore et je vous souhaite une bonne année.

bee
__________________
beegees est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 19h34   #5
ok.Idriss
Responsable Modération

 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 3 799
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 3 799
Points : 12 147
Points : 12 147
Citation:
J'ai finalement repris tout de zéro et cela fonctionne maintenant très bien.
Super

Mais c'est dommage de ne pas indiquer ta solution ici, ça pourrait toujours servir

A+
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 19h46   #6
beegees
Membre Expert
 
Avatar de beegees
 
Homme David Non communiqué
Développeur Web
Inscription : mars 2004
Messages : 3 348
Détails du profil
Informations personnelles :
Nom : Homme David Non communiqué
Âge : 38
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : Enseignement

Informations forums :
Inscription : mars 2004
Messages : 3 348
Points : 1 220
Points : 1 220
Citation:
Envoyé par ok.Idriss Voir le message
Super

Mais c'est dommage de ne pas indiquer ta solution ici, ça pourrait toujours servir

A+
Bien sûr, voici le code demandé :

Code :
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
<?php
    session_start();
 
    // email fields: to, from, subject, and so on
    $to = "monemail@gmail.com";
    $subject ="My subject";
    $from = $_POST['netID']."@gmail <".$_POST['netID']."@gmail.com>";
     $message = '<div style="text-align:center";><img id="logo_padi" width="102px" height="120px"  /></div>';
    $message.=  "<p><b>".$_POST['matricule'] . " " . $_POST['prenom'] . " " . $_POST['nom'] . " (" . $_POST['netID']."</b>) a laissé ce message </p>";
    $message.= "\n\n";
    $message.= "<p>Type de problème : <b>" . $_POST['type_probleme']."</b></p>";
    $message.= "<p>Description du problème : </p>";
    $message.= "<p>-----------------Début---------------------</p>";
    $message.= "<b>".$_POST['message']."</b>";
    $message.= "<p>------------------Fin----------------------</p>";
    $message.= "<p>Situation géographique du problème : </p>";
    $message.= "<p>Campus :<b> " . $_POST['campus'] . "</b> - Faculté : <b>" . $_POST['faculte']. "</b> - Local : <b>" . $_POST['local']. "</b> - Nom du PC : <b>". $_POST['nom_PC']."</b></p>";
     if(isset($_SESSION['$path']))
    {
    $fichier_joint = explode('\\',$_POST["piece_jointe"]);
    $message.= "<p>Pièce jointe : <a href='padi.ac.be/help/upload/".$_POST['piece_jointe']."'>padi.be/help/upload/".$fichier_joint[sizeof($fichier_joint)-1]."</a></p>";
    }
    $headers = "From: $from";
    if(isset($_SESSION['$path']))
    {
    $path = $_SESSION['$path'];
    }
 
    // boundary
    $semi_rand = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
 
    // headers for attachment
    $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
 
    // multipart boundary
    $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
    $message .= "--{$mime_boundary}\n";
     if(isset($_SESSION['$path']))
    {
    // preparing attachments
    $file = fopen($path,"rb");
    $data = fread($file,filesize($path));
    fclose($file);
    $data = chunk_split(base64_encode($data));
    $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$path\"\n" . "Content-Disposition: attachment;\n" . " filename=\"$path\"\n" .     "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
    $message .= "--{$mime_boundary}\n";
    }
    // send
 
    $ok = @mail($to, $_POST['campus']." ".$_POST['faculte']." ".$_POST['local']." ".$_POST['type_probleme'], $message, $headers);
    unset($_SESSION['$path']);
    print_r($_SESSION);
    if ($ok)
    {
        echo "<p>mail sent to $to!</p>";
    } else
    {
        echo "<p>mail could not be sent!</p>";
    }
 
?>
__________________
beegees est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h41.


 
 
 
 
Partenaires

Hébergement Web