Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2011, 21h50   #1
Invité régulier
 
alain smo
Inscription : mai 2010
Messages : 31
Détails du profil
Informations personnelles :
Nom : alain smo

Informations forums :
Inscription : mai 2010
Messages : 31
Points : 7
Points : 7
Par défaut envoyer un mail avec un fichier joint

j'ai essayé laborieusement les différents exemples présents dans les forum, aucun ne marche !

voici mon test : on reçoit bien un mail prétendant avoir une pièce jointe mais quand on essaye de lire le mail il la perd, elle disparaît !!!.

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
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
<?php
$expediteur = $_POST['expediteur'];
$destinataire = $_POST['destinataire'];
$copie = $_POST['copie'];
$message = stripslashes($_POST['message']);
$sujet = $_POST['sujet'];
$fichier = basename( $_FILES['fichier']['name']);
 
if(!($expediteur && $destinataire))
{
	echo "<script> javascript:history.back()  </script>";
	exit;
}
 
$boundary = "----=".md5(uniqid(microtime(), TRUE));
 
if($fichier)
{
	$upload_file = $_FILES['fichier']['tmp_name']; // fichier temporaire chargé par le formulaire
	$fichier = basename( $_FILES['fichier']['name']);
	$sujet = $_POST["sujet"]; 
	$message = htmlspecialchars($_POST["message"], ENT_QUOTES); 
 
	$ext = explode(".", $fichier); 
	switch($ext[1]) 
	{ 
		default:       
		$attach_type =  "application/octet-stream";  
	break; 
		case "gz":    
		$attach_type =  "application/x-gzip";  
	break; 
		case "tgz":   
		$attach_type =  "application/x-gzip";  
	break; 
		case "zip":   
		$attach_type =  "application/zip"; 
	break; 
		case "pdf":   
		$attach_type =  "application/pdf"; 
	break; 
		case "png":   
		$attach_type =  "image/png"; 
	break; 
		case "gif":   
		$attach_type =  "image/gif"; 
	break; 
		case "jpg": 
		case"jpeg":   
		$attach_type =  "image/jpeg"; 
	break; 
		case "txt":   
		$attach_type =  "text/plain"; 
	break; 
		case "htm":   
		$attach_type =  "text/html";   
	break; 
		case "html":  
		$attach_type =  "text/html"; 
	break; 
	} 
	$attach_name = $_FILES["fichier"]["name"]; 
 
	$mailheaders  = "From: \"$expediteur\"\r\n"; 
	$mailheaders .= "BCc: $copie\r\n"; 
 
	$mailheaders .= "MIME-Version: 1.0\r\n"; 
	$mailheaders .= "Content-Type: multipart/mixed; boundary=--\"".$boundary."\""; 
	$mailheaders .= "--$boundary\r\n\r\n"; 
	$mailheaders .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; 
	//$mailheaders .= "X-attachments: $attach_name\r\n"; 
	$body_top = "--$boundary\r\n";
	$body_top .= "Content-type: text/html;  charset=ISO-8859-1\r\n"; 
	$body_top .= "Content-transfer-encoding: 8bit\r\n"; 
 
	$msg_body = $body_top . $message; 
 
	$msg_body .= "\r\n\r\n--$boundary--\n";
	$msg_body .= "Content-type: $attach_type; name=\"$attach_name\"\r\n";  
	$longueur = filesize($upload_file);
	$msg_body .= "Content-Length: $longueur\r\n";     
	$msg_body .= "Content-transfer-Encoding: BASE64\r\n"; 
	$msg_body .= "Content-disposition: attachment; filename=\"$attach_name\"\r\n\r\n"; 
	$msg_body .= chunk_split(base64_encode(file_get_contents($upload_file)))."\r\n"; 
	$msg_body .= "--$boundary--\r\n";
 
echo "<br><br> longueur : $longueur ";	
echo "<br><br> headers :   $mailheaders   <br>";
echo "<br><br> body :   $msg_body   <br>";
echo "<br><br> destinataire :     $destinataire   <br>";
 
	if(mail($destinataire, $sujet, $msg_body, $mailheaders))
	{
		echo "<br><br> SUCCES <br>";
	}
} 
 
else
	if(mail( $destinataire , $sujet, $message, "Content-Type: text/html; charset=ISO-8859-1\r\nFrom: $expediteur\r\nBCc: $copie\r\n"))
	{
		echo "<br><br> SUCCES <br>";
	}
 
//header("location: $HTTP_REFERER"); // retour arrière vers la page d'appel vierge
 
?>


Le premier (ou la première) qui aura une bonne idée sera bien récompensé.

merci d''avance

A
alainsm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 15h46   #2
Membre confirmé
 
Avatar de zulad
 
Inscription : juin 2007
Messages : 500
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 500
Points : 289
Points : 289
tu peux essayer le fichier déposé plus url d'accompagnement. Pour ma part, je n'ai jamais réussi a mettre un attachement en php.

Regarde ici, ça a l'air pas mal expliqué. Tu as ça aussi : http://www.xpertmailer.com/
__________________
Il y a trois grandes catégories d'individus : Les S:sensibles / Les P:penseurs / Les A:agités (Tous sont des animaux)
zulad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 15h08   #3
Invité régulier
 
alain smo
Inscription : mai 2010
Messages : 31
Détails du profil
Informations personnelles :
Nom : alain smo

Informations forums :
Inscription : mai 2010
Messages : 31
Points : 7
Points : 7
Citation:
Envoyé par zulad Voir le message
tu peux essayer le fichier déposé plus url d'accompagnement. Pour ma part, je n'ai jamais réussi a mettre un attachement en php.

Regarde ici, ça a l'air pas mal expliqué. Tu as ça aussi : http://www.xpertmailer.com/
merci
j'ai essayé ce qui est proposé sans succès : la pièce attachée disparait quand on veut lire le message !

par contre j'ai fini par pondre quelque-chose qui marche bien surtout quand on utilise la messagerie gmail.
Avec Thunderbird le message texte n’apparaît pas.
Si quelqu'un sait pourquoi il sera le bienvenu.
En tout cas la pièce jointe est toujours bien transmise.

Voici le source du fichier envoi_mail.php à appeler pour envoyer un mail saisi dans un formulaire adequat :

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
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
 
<?php
function typemime($file)
{
	$ext = explode(".", $file); 
	switch($ext[1]) 
	{ 
		default:       
		$type =  "application/octet-stream";  
	break; 
		case "gz":    
		$type =  "application/x-gzip";  
	break; 
		case "tgz":   
		$type =  "application/x-gzip";  
	break; 
		case "zip":   
		$type =  "application/zip"; 
	break; 
		case "pdf":   
		$type =  "application/pdf"; 
	break; 
		case "png":   
		$type =  "image/png"; 
	break; 
		case "gif":   
		$type =  "image/gif"; 
	break; 
		case "jpg": 
		case"jpeg":   
		$type =  "image/jpeg"; 
	break; 
		case "txt":   
		$type =  "text/plain"; 
	break; 
		case "htm":   
		$type =  "text/html";   
	break; 
		case "html":  
		$type =  "text/html"; 
	break; 
	} 
	return $type;
}
 
//==============================================================================================
 
function mail_attachement($to , $bcc , $sujet , $message , $fichier , $typemime , $nom , $reply , $from)
{
 
 $limite = "_parties_".md5(uniqid (rand()));
 
 $mail_mime = "Date: ".date('l j F Y, G:i')."\n";
 $mail_mime .= "MIME-Version: 1.0\n";
 $mail_mime .= "Content-Type: multipart/mixed;\n";
 
 $mail_mime .= " boundary=\"----=$limite\"\n\n";
 
//le fichier
 $attachement = "------=$limite\n";
 
//d'abord un message texte qui peut être en html
 $attachement .= "Content-Type:  text/html;  charset=ISO-8859-1\n";
 $attachement .= "Content-Transfer-Encoding: 8bit\n";
 $attachement .= $message;
 $attachement .= "\n\n\n------=$limite\n";
 
// traitement du fichier à attacher
 $attachement .= "Content-Type: $typemime; name=\"$nom\"\n";
 $attachement .= "Content-Transfer-Encoding: base64\n";
 $attachement .= "Content-Disposition: attachment; filename=\"$nom\"\n\n";
 
 $fd = fopen( $fichier, "r" );
 $contenu = fread( $fd, filesize( $fichier ) );
 fclose( $fd );
 $attachement .= chunk_split(base64_encode($contenu));
 
 $attachement .= "\n\n\n------=$limite\n";
 
 return mail($to, $sujet, $attachement, "Reply-to: $reply\nFrom: $from\nBcc: $bcc\n".$mail_mime);
 }
 
//==================================================================================================
 
$expediteur = $_POST['expediteur'];
$destinataire = $_POST['destinataire'];
$copie = $_POST['copie'];
$sujet = $_POST['sujet'];
 
$texte = str_repeat($_POST['message'],1);//$message = stripslashes($_POST['message']);
$texte = wordwrap($texte, 66 , "<br>" ); // pour découper le message en lignes de 70
 
//$nomfichier = basename( $_FILES['fichier']['name']);
$nomfichier = $_FILES['fichier']['name'];
 
if(!($expediteur && $destinataire))
{
	echo "<script> javascript:history.back()  </script>";
	exit;
}
 
if($nomfichier)
{
	$mimeType = typemime($nomfichier);
	$fichier_telechargeable = $_FILES['fichier']['tmp_name']; // fichier temporaire chargé par le formulaire
	$replyto = ""; // peut être nul
	mail_attachement($destinataire,$copie,$sujet,$texte,$fichier_telechargeable,$mimeType,$nomfichier, $replyto, $expediteur);
 
} 
 
else  // sans attachement
	mail( $destinataire , $sujet, $texte, "Content-Type: text/html; charset=ISO-8859-1\nFrom: $expediteur\nBCc: $copie\n");
 
echo "<script> javascript:location.replace(document.referrer)  </script>";	
exit;
 
?>


je peux donner un exemple de ce formulaire à qui en aurait besoin
alainsm est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h07.


 
 
 
 
Partenaires

Hébergement Web