Bonjour tout le monde,
J'ai juste une petit question au sujet de phpmailer.
Est-il possible d'envoyer un email avec une piece jointe en local ?
merci pour votre aide.
Version imprimable
Bonjour tout le monde,
J'ai juste une petit question au sujet de phpmailer.
Est-il possible d'envoyer un email avec une piece jointe en local ?
merci pour votre aide.
Oui, il suffit d'installer un serveur sur la machine locale (Apache et module PHP).
Perso, j'utilise simplement EasyPHP et j'envoi des mails directement à partir de mon PC.
J'espère avoir compris la question...
Si c'est juste la pièce jointe qui est locale, il faudra l'uploader sur le serveur.
J'avais déjà répondu à cette question dans le forum... à+
http://sub0.developpez.com/tag.png
Lien tout en bas à gauche de cette fenêtre
Voilà, je n'ai pas retrouvé le sujet, mais j'ai tout de même le code :http://sub0.developpez.com/tag.pngCode:
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 <?php Require_once('phpmailer/class.phpmailer.php'); $maxfiles = 3; $maxsize = 2000000; $from_adr = 'expediteur@free.fr'; $to_adr = 'destinataire@hotmail.com'; $subject = 'Envoi de pièces jointes locales'; //============================================================ if(isset($_POST['valider'])){ // Test du nombre de fichier // $nbr=0; for($x=0;$x<$maxfiles;$x++) if(!empty($_FILES['userfile']['name'][$x])) $nbr++; if($nbr<=0) die("Aucun fichier spécifié !<br/>"); // Création du mail // $mail = New PHPmailer(); $mail->IsHTML(true); $mail->IsMail(); $mail->IsSMTP(); $mail->Host='smtp.free.fr'; $mail->From=$from_adr; $mail->AddAddress($to_adr); $mail->AddReplyTo($from_adr); $mail->Subject=$subject; $mail->Body='<html><body>Les fichiers sont attachés ci-dessus... <br></body></html>'; $sendok=false; // Téléchargement des fichiers // for($x=1;$x<=$maxfiles;$x++) { $errorhttp=$_FILES['userfile']['error'][$x-1]; $filenamehttp=$FILES['userfile']['name'][$x-1]; $typehttp=$FILES['userfile']['type'][$x-1]; $sizehttp=$FILES['userfile']['size'][$x-1]; $tmpfilehttp=$FILES['userfile']['tmp_name'][$x-1]; if (($errorhttp)and(!empty($filenamehttp))) { switch ($errorhttp){ case 1: echo "Erreur : Le fichier n°$x est trop grand !<br/>";break; case 2: echo "Erreur : Le fichier n°$x est trop grand !<br/>";break; case 3: echo "Erreur : Transfert du fichier n°$x interrompu !<br/>";break; case 4: echo "Erreur : Le fichier n°$x est vide !<br/>";break; } } else { if((!empty($filenamehttp))and($sizehttp>0)) { if($sizehttp<=$maxsize){ if(@is_uploaded_file($tmpfilehttp)) { if(@eregi('.php',$filenamehttp)) $filenamehttp.='.txt'; if(filesize($tmpfilehttp)==$sizehttp) { echo "Fichier n°$x uploadé : ".$filenamehttp. " (".round(max($sizehttp,1024)/1024)." ko)<br/>"; $mail->AddAttachment($tmpfilehttp,$filenamehttp,'Base64'); $sendok=true; } else echo "Erreur de téléchargement du fichier n°$x !<br/>"; } else echo "Erreur de téléchargement du fichier n°$x !<br/>"; } else echo "Erreur : Le fichier n°$x est trop grand !<br/>"; } // else echo "Le fichier n°$x est introuvable ou vide !<br/>"; } } // Envoi du mail // if($sendok){ if(!$mail->Send()) echo $mail->ErrorInfo."<br/>"; else echo "Mail envoyé à «".$to_adr."»<br/>"; } else echo "Aucun fichier à attacher !<br/>"; // Libération de l'objet // $mail->SmtpClose(); unset($mail); die ("Opération terminée.<br/>"); } //============================================================ echo '<form method="post" enctype="multipart/form-data"'. ' onSubmit="document.getElementById(\'valider\').style.visibility=\'hidden\';">'. '<input type="hidden" name="MAX_FILE_SIZE" value="'.$maxsize.'"/>'; for($x=1;$x<=max($maxfiles,1);$x++) echo ' Fichier n°'.$x.' : <input type="file" name="userfile[]" size="20"/><br/>'; echo '<br/><input type="submit" name="valider" id="valider" value="Envoyer..."/></form>'; //============================================================ ?>
Lien tout en bas à gauche de cette fenêtre
Le serveur n'est pas en local, je suis hébergé chez OVH.
Pour la(les) pièce(s) jointe(s) locale(s), je récupère en fait son adresse sur le disque en local(pas sur le serveur) grâce à un formulaire. Je pensais pouvoir eviter de mettre les pièces jointes sur le serveur (surtout que je n'y arrive pas).
Je ne comprends pas trop cette partie de ton code :
merci pour ton aide.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 for($x=1;$x<=$maxfiles;$x++) { $errorhttp=$_FILES['userfile']['error'][$x-1]; $filenamehttp=$FILES['userfile']['name'][$x-1]; $typehttp=$FILES['userfile']['type'][$x-1]; $sizehttp=$FILES['userfile']['size'][$x-1]; $tmpfilehttp=$FILES['userfile']['tmp_name'][$x-1]; if (($errorhttp)and(!empty($filenamehttp))) { switch ($errorhttp){ case 1: echo "Erreur : Le fichier n°$x est trop grand !<br/>";break; case 2: echo "Erreur : Le fichier n°$x est trop grand !<br/>";break; case 3: echo "Erreur : Transfert du fichier n°$x interrompu !<br/>";break; case 4: echo "Erreur : Le fichier n°$x est vide !<br/>";break; } } else { if((!empty($filenamehttp))and($sizehttp>0)) { if($sizehttp<=$maxsize){ if(@is_uploaded_file($tmpfilehttp)) { if(@eregi('.php',$filenamehttp)) $filenamehttp.='.txt'; if(filesize($tmpfilehttp)==$sizehttp) { echo "Fichier n°$x uploadé : ".$filenamehttp. " (".round(max($sizehttp,1024)/1024)." ko)<br/>"; $mail->AddAttachment($tmpfilehttp,$filenamehttp,'Base64'); $sendok=true; } else echo "Erreur de téléchargement du fichier n°$x !<br/>"; } else echo "Erreur de téléchargement du fichier n°$x !<br/>"; } else echo "Erreur : Le fichier n°$x est trop grand !<br/>"; } // else echo "Le fichier n°$x est introuvable ou vide !<br/>"; } }
Désolé j'ai fais mon feignant, je vais voir un peu sur internet comment sa se passe avec $_FILE.
Par contre j'ai une question, voici mon formulaire
donc en fait je met l'objet de type file dans un tableau puis je l'envoie dans un champs hidden.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 echo' <html> <head> <title></title> </head> <body> <script language="javascript" type="text/javascript"> var nombre=0; var tab=new Array(); function joindre() { nombre=nombre+1; tab[nombre]=document.forms["mail"].elements["piece"].value; document.forms["mail"].elements["joint"].value=tab; } </script> <form method="POST" enctype="multipart/form-data" name="mail" action="send_email.php"> <p>Adresse Email de l\'emetteur : <input type="text" name="emetteur" size="50" /></p> <p>accusé de réception <input type="checkbox" name="recept" value="recept" /></p> <p>Pièce jointe :<input name="piece" type="file" size="40" /><input type="button" value="joindre" onclick="joindre()" /> <p>Objet :<input type="text" name="objet" size="100" /></p> <p>Corps :<textarea name="corps" cols="100" rows="30"></textarea></p> <input type="hidden" name="joint" value="" /> <p>Choix destination email</p> '; include('../Fonctions/connexion.inc.php'); $sql="SELECT Id_type,Nom_Type FROM TYPE"; $data=mysql_query($sql)or die("Erreur de requete :".$sql."<br />".mysql_close()); while($contenu=mysql_fetch_row($data)) { echo' <input type="checkbox" name="choix[]" value="'.$contenu[0].'">'.$contenu[1].' '; } echo' <br /> <input type="submit" name="ok" value="Suivant" /> <input type="submit" name="test" value="Test" /> <input type="reset" value="effacer" /> </form> <a href="index.php"> </body> </html> '; mysql_close(); } else { header("location:../index.html"); exit(); } ?>
Le champs hidden est-ce que je pourrais le recupérer en $_FILE ?
Voici mon code il y a une erreur qui est que tout fonctionne nickel sauf le fait que le mail n'est pas parti.
Je n'ai aucun message d'erreur.
si quelqu'un a une idéeCode:
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 <?php session_start(); if(isset($_SESSION['login'])) { $choix=$_POST['choix']; $corps=$_POST['corps']; $objet=$_POST['objet']; $emetteur=$_POST['emetteur']; require("phpmailer/class.phpmailer.php"); $email = new PHPMailer(); $email->IsSmtp(); $email->Host="smtp.garanceprod.com"; $email->From=$emetteur; $email->FromName=$emetteur; $email->AddReplyTo($emetteur); $email->Subject=$objet; $email->Body=$corps; $destination="pieces/"; $nomdestination=$_FILES['piece']['name']; if(is_uploaded_file($_FILES['piece']['tmp_name'])) { if(rename($_FILES['piece']['tmp_name'],$destination.$nomdestination)) { } else { echo 'erreur'; } } else { echo 'autre erreur : '.$destination.$nomdestination.''; } $email->AddAttachment($destination.$nomdestination); include('../Fonctions/connexion.inc.php'); if(!isset($_POST['choix'])) { echo 'Oublie de cocher une categorie'; } else { $choice=$_POST['choix']; $i=0; $tableau=array(); foreach($choice as $value) { $sql="SELECT Nom_Email FROM APPARTIENT, EMAIL WHERE APPARTIENT.Id_Email=EMAIL.Id_Email AND Id_Type=".$value.";"; $data=mysql_query($sql)or die("Erreur de requete : ".$sql."<br />".mysql_error()); $nombre=mysql_num_rows($data); if($nombre<=0) { echo 'Il n y a pas d adresse email dans la categorie : '.$value.''; } else { while($contenu=mysql_fetch_row($data)) { $i=$i+1; $u=1; if($i==1) { $tableau[$i]=$contenu[0]; $email->AddAddress($contenu[0]); if(!$email->Send()) { echo "le message n a pas ete envoye"; echo "erreur mail : ".$email->ErrorInfo; } echo'c lancer'; $email->ClearAddresses(); } else { while($u<=$i && strcasecmp($tableau[$u],$contenu[0])!=0) { $u=$u+1; } $tableau[$i]=$contenu[0]; } if($u<=$i && strcasecmp($tableau[$u],$contenu[0])!=0) { $email->AddAddress($contenu[0]); if(!$email->Send()) { echo "le message n a pas ete envoye"; echo "erreur mail : ".$email->ErrorInfo; } else { echo "c lancer"; } $email->ClearAddresses(); } } } } if(isset($destination)) { if(!unlink($destination.$nomdestination)) { echo 'le fichier n a pas pu etre supprimer'; } } } } else { header("location:../index.html"); exit(); } ?>