IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[PHPMailer] Pièce jointe en local


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 95
    Par défaut [PHPMailer] Pièce jointe en local
    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.

  2. #2
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    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... à+


    Lien tout en bas à gauche de cette fenêtre

  3. #3
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Voilà, je n'ai pas retrouvé le sujet, mais j'ai tout de même le 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
    <?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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 95
    Par défaut
    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 :
    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
     
    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/>";
        }
      }
    merci pour ton aide.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 95
    Par défaut
    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
    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
     
    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();
    	}
    ?>
    donc en fait je met l'objet de type file dans un tableau puis je l'envoie dans un champs hidden.
    Le champs hidden est-ce que je pourrais le recupérer en $_FILE ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 95
    Par défaut
    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.
    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
     
    <?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();
    	}
    ?>
    si quelqu'un a une idée

Discussions similaires

  1. [PHP 5.2] [PHPMailer] - pièce jointe corrompue
    Par gussoner dans le forum Langage
    Réponses: 12
    Dernier message: 06/05/2013, 21h49
  2. [PHPMailer] Pièces jointes
    Par Riri80 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/04/2010, 13h54
  3. [PHPMailer] Pièce jointe trop volumineuse
    Par Bioteck dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 13/01/2010, 17h54
  4. [PhpMailer]Pièces jointes n'apparaissant pas.
    Par johweb dans le forum Langage
    Réponses: 1
    Dernier message: 01/04/2009, 17h47
  5. [phpmailer]Copie cachée en pièce jointe ?
    Par elitemedia dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/11/2006, 21h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo