Bonjour,

J'essaye d'envoyer un mail avec php en format html avec une pièce jointe.
Mon problème est que le mail est bien envoyé mais il n'est pas au format html.
Par exemple je reçois ceci dans ma boite
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
 
<html><head><title>Un titre ici</title></head><body><span class=\"taille4ngitalic\">ddddddddddddddddd</span></body></html>
Le code n'est pas interprété.
Mon problème doit être dans les headers mais je ne vois pas où.
voici 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
 
echo"<h3>Envoi de mail</h3>";
 
//----------------------------------
// Construction de l'entête
//----------------------------------
// On choisi généralement de construire une frontière générée aleatoirement
// comme suit.
$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";
 
//---------------------------------
// 1ère partie du message
// Le texte
//---------------------------------
// Chaque partie du message est séparé par une frontière
 
     // $headers .='From: "association A.I.D.E.R"<asso.aider@tele2.fr>'."\n"; 
     //$headers .='Reply-To: asso.aider@tele2.fr'."\n";  
$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";
//C'est pas un spam
$msg .="==================================\r\n
        ======Ceci n'est pas un SPAM======\r\n
        ==================================\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
//$message=stripslashes($message);
$msg .='<html><head><title>Un titre ici</title></head><body>';
$msg .= $message."\r\n";
$msg .='</body></html>';
echo"$message";
$msg .= "\r\n";
 
if(strlen($fichier)!=0)
{
//---------------------------------
// 2nde partie du message
// Le fichier
//---------------------------------
// Tout d'abord lire le contenu du fichier
if($fichier[0]=="\\")
{
$fichier=stripslashes($fichier);
}
$fp = fopen($fichier, "rb") or die("probleme à l'ouverture du fichier"); //b pour environnement Windows
$attachment = fread($fp, filesize($fichier));
fclose($fp);
// puis convertir le contenu du fichier en une chaîne de caractère
// certe totalement illisible mais sans caractères exotiques
// et avec des retours à la ligne tous les 76 caractères
// pour être conforme au format RFC 2045
$attachment = chunk_split(base64_encode($attachment));
//Je veux le nom du fichier
$fichier=basename($fichier);
//je veux l'extension du fichier
$morceaux=explode(".",$fichier);
$extFichier=$morceaux[1];//dans [0] c'est le nom, dans [1] c'est l'extension
//je veux le type MIME associée à cette extension
$typeMIMEFichier=get_type_MIME($extFichier);
// Ne pas oublier que 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: ".$typeMIMEFichier."; name=\"$fichier\"\r\n";
// Et comment il sera codé
$msg .= "Content-Transfer-Encoding: base64\r\n";
// Il est possible de demander à ce que le fichier
// soit si possible affiché dans le corps du mail
$msg .= "Content-Disposition: inline; filename=\"$fichier\"\r\n";
// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
$msg .= "\r\n";
// C'est ici que l'on insère le code du fichier lu
$msg .= $attachment . "\r\n";
$msg .= "\r\n\r\n";
 
// voilà, on indique la fin par une nouvelle frontière
$msg .= "--$boundary--\r\n";
 
 
 
}
 
//On fait des paquets de 20 destinaires
//Tous sont dans $dest (transmis par le script mailClient.php)
//On enverra autant de mails que de paquets de destinataires
$dest=$expediteur;
$paketKonVeu=20;
$morceauDest=explode(',',$dest);
if(sizeof($morceauDest)<=$paketKonVeu)//ca tient dans un seul paquet
   {
   $expediteur="";//chaine vide
   for($i=0;$i<=$paketKonVeu-1;$i++)
        {
        if($i==$paketKonVeu-1)//dernier email
            {
            $expediteur.= $morceauDest[$i];//pas de Virgule à la fin
            }
        else
            {
            $expediteur .= $morceauDest[$i].",";
            }
        }
   echo "<BR>Envoi de mail EN COURS";
   mail($expediteur,$sujet,$msg,$header);
   echo "-----TERMINE";
   }
if(sizeof($morceauDest)>$paketKonVeu)//il faut plusieurs paquets
   {
   $nbPaquets=ceil(sizeof($morceauDest)/$paketKonVeu);
   //EXEMPLE PAR PAQUET DE 20 DESTINATAIRES
   //INDICES DU TABLEAU :
   //0-->19 20-->39 40-->59 60-->79 80-->99 100-->119
   for($paquet=0;$paquet<$nbPaquets;$paquet++)
        {
         $expediteur="";//chaine vide
         $seuilBas=$paquet*$paketKonVeu;
         $seuilHaut=$seuilBas+($paketKonVeu-1);
         for($i=$seuilBas;$i<=$seuilHaut;$i++)
              {
              if($i==$seuilHaut)//dernier email
                  {
                  $expediteur .= $morceauDest[$i];//pas de Virgule à la fin
                  }
              else
                  {
                  $expediteur .= $morceauDest[$i].",";
                  }
               }//fin du FOR $seuil
         echo "<BR>Envoi de mail pour la serie&nbsp".($paquet+1)."&nbsp;de destinataires EN COURS";
         set_time_limit(0);
         mail($expediteur,$objet,$msg,$header);
         echo "-----TERMINE";
        }//fin du FOR $paquet
   }//fin du IF
echo "<BR><h3>Fin de l'envoi de mail</h3>";
Je remercie d'avance celui qui m'aidera