Bonjour. je suis en train de faire un site internet pour une entreprise, dans lequel je propose de déposer son CV et sa lettre de motivation après avoir rempli un formulaire. J'ai malheureusement, des soucis pour envoyer les pièces jointes.
Mon code utilise 3 fichiers. Le premier, candidature.php, comporte tout le code html, et l'appelle aux fonctions principales. Le code est effectué dans une classe CCandidature. Les fonctions mail sont dans une 'librairie' car elles seront réutilisées par la suite.
Pour plus de clarté, j'ai écris deux fonctions, une pour envoyer des mails, sans pièces jointes, et l'autre avec.
Voila le code des fonctions et leur appelle :
Cette fonction fonctionne très bien.
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 /* Envoi de mails sans pieces jointes */ function envoi_mail_sans_pj($P_expediteur, $P_destinataire, $P_reponse, $P_smtp, $P_objet, $P_texte) { $rapport=true; // sert a verifier si tout c'est bien passé $objet=$P_objet; $mail=$P_texte; $expediteur=$P_expediteur; $destinataire=$P_destinataire; $reponse=$P_reponse; $smtp=$P_smtp; if(ini_set("sendmail_from",$expediteur)==false) { $rapport=false; } else { if (ini_set("SMTP",$smtp)==false) { $rapport=false; } else { $entete = "De: ".$expediteur."\r\n Repondre à : ".$reponse."\r\n X-Mailer: PHP/" . phpversion(); if ($destinataire !="") { if (@mail($destinataire, $objet, $mail, $entete)==false) { $rapport=false; } } else { $rapport=false; } } } return $rapport; }
Elle est appelée :
Voici maintenant la focntion qui envoi aussi des pièces jointes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $objet="Candidature spontanée"; $mail="corps du mail"; $expediteur="x.xxxxx@xxxxx.xxx"; $destinataire="xxxxx@xxxxx.xxxx"; $reponse="reponse@xxxxxxxx.xxx"; $smtp="smtp.orange.fr"; envoi_mail_avec_pj($expediteur, $destinataire, $reponse, $smtp, $objet, $mail);
Je l'appele ainsi :
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 function envoi_mail_avec_pj($P_expediteur, $P_destinataire, $P_reponse, $P_smtp, $P_objet, $P_texte, $P_pj) { $rapport=true; $boundary = md5(uniqid(microtime(), TRUE)); $objet=$P_objet; $expediteur=$P_expediteur; $destinataire=$P_destinataire; $reponse=$P_reponse; $smtp=$P_smtp; $pj=$P_pj; if(ini_set("sendmail_from",$expediteur)==false) { $rapport=false; } else { if (ini_set("SMTP",$smtp)==false) { $rapport=false; } else { $entete = "De: ".$expediteur."\r\n Repondre à : ".$reponse."\r\n X-Mailer: PHP/" . phpversion(); $entete .= 'Mime-Version: 1.0'."\r\n"; $entete .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n"; $entete .= "\r\n"; if ($destinataire !="") { /* code pour envoyer une piece jointe */ echo $pj; if (file_exists($pj)) { $pj_type = filetype($pj); $pj_size = filesize($pj); echo $pj_size.$pj_type; $handle = fopen($pj, 'r') or die('File '.$pj.'can t be open'); $content = fread($handle, $pj_size); $content = chunk_split(base64_encode($content)); $f = fclose($handle); $mail .= '--'.$boundary."\r\n"; $mail .= 'Content-type:'.$pj_type.';name='.$pj."\r\n"; $mail .= 'Content-transfer-encoding:base64'."\r\n"; $mail .= $content."\r\n"; } $mail .= '--'.$boundary."\r\n"; /* fin du code de la piece jointe */ if (@mail($destinataire, $objet, $mail, $entete)==false) { $rapport=false; } } else { $rapport=false; } } } return $rapport; }
je recoit bel et bien mon mail, cependant, il me donne deux pièces jointes au lieu d'une. la première est bien celle voulue, la seconde est "partie 1.2".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $objet="Candidature spontanée"; $mail="corps du mail"; $expediteur="xxxxxx@xxxxxx.xxxx"; $destinataire="xxxxxxxxx@xxxxxxxx.xxxx"; $reponse="reponse@xxxxxxxxx.xxx"; $smtp="smtp.orange.fr"; envoi_mail_avec_pj($expediteur, $destinataire, $reponse, $smtp, $objet, $mail, "_Documents/".$this->cv['name']);
De plus, lorsque j'essai d'ouvrir la premiere, adobe affiche un messageJe précise que : "_Documents/".$this->cv['name'] correspond au chemin ou aller chercher le fichier sur le serveur. Dans mes tests $this->cv['name']="test.pdf"."Adobe reader n'a pas pu ouvrir xxxxx.pdf car le type de fichier n'est pas pris en charge ou le fichier est endommagé (il a été envoyé en tant que pièsce jointe et n'a pas été décodé correctement, par exemple).
je ne comprends pas d'où ça viens.
Partager