Bonjour,

J'aimerais envoyer un mail avec pièce jointe, mais ça ne marche pas comme je veux.

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
<?php
// To
$to = 'destinataire1,destinataire2';
 
// Subject
$subject = 'Bonjour... !';
 
// clé aléatoire de limite
$boundary = md5(uniqid(microtime(), TRUE));
 
// Headers
$headers = 'From: moi <moi@server.com>'."\r\n";
$headers .= 'Mime-Version: 1.0'."\r\n";
$headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
$headers .= "\r\n";
 
// Message
$msg = 'Message avec pièce jointe.'."\r\n\r\n";
 
// Texte
$msg .= '--'.$boundary."\r\n";
$msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
$msg .= 'Content-transfer-encoding:8bit'."\r\n";
$msg .= 'Un message avec une pièce jointe.'."\r\n";
 
// Pièce jointe
$file_name = '/home/ludo/public_html/bonjour/images/poney/Feb_11_2010.jpg';
if (file_exists($file_name))
{
	$file_type = filetype($file_name);
	//$file_type = 'image/jpeg';
	$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";
	$msg .= $content."\r\n";
} else {
	echo "Le fichier n'existe pas";
}
 
// Fin
$msg .= '--'.$boundary."\r\n";
 
// Function mail()
if (mail($to, $subject, $msg, $headers)) {
	echo "email envoye\n";
} else {
	echo "probleme lors de l'envoi du mail\n";
}
?>
Le fichier en question est une image jpeg, la fonction filetype me retourne "file". J'ai donc aussi testé en forçant le type = "image/jpeg". Voici les résultats obtenus :
Pour les destinataires j'ai un client mail (outlook 2003) et un webmail (gmail).
- sous outlook 2003 je reçois le mail mais il n'est pas "interprété". voici le contenu du mail :
Mime-Version: 1.0

Content-Type: multipart/mixed;boundary=83fef4e94825adb9e5e4d9e719263a42

Message-Id: <20100302135521.E337D1B41E@eeebox>
Date: Tue, 2 Mar 2010 14:55:21 +0100 (CET)





Message avec pièce jointe.



--83fef4e94825adb9e5e4d9e719263a42

Content-type:text/plain;charset=utf-8

Content-transfer-encoding:8bit

Un message avec une pièce jointe.

--83fef4e94825adb9e5e4d9e719263a42

Content-type:file;name=/home/ludo/public_html/bonjour/images/poney/Feb_11_2010.jpg

Content-transfer-encoding:base64

/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkI

CQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQ

etc...

--83fef4e94825adb9e5e4d9e719263a42
alors que sous gmail le mail passe sans problème et l'image est bien en pièce jointe.

Quelqu'un saurait me dire d'où ça vient et comment résoudre le problème ?

Merci.