Envoie de mail avec pièce jointe php, renseignement

fanzy76 Messages postés 8 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 2 mars 2009 - 14 janv. 2009 à 10:39
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 - 14 janv. 2009 à 14:32
Bonjour, je sais que ce sujet est assez redondant, mais j'aurais besoin de renseignements. Après diverses recherchent sur la toile, je n'ai pu répondre à cette question :
Est-il possible d'envoyer un mail avec pièce jointe en php sans faire d'upload?

Si je me pose cette question, c'est pour la simple et bonne raison que je crée un site internet en php et que la fonction pour envoyer des mails avec pièce jointe fonctionne bien en local mais pas sur le serveur distant (je ne peux toucher à la config de php.ini dont aucune valeur n'est renseignée pour permettre l'upload).

Un coup de main serait le bienvenu.

Merci d'avance!

 Quand ça bug, ça bug!

5 réponses

Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
14 janv. 2009 à 10:53
Je pense pas que ça soit possible pour des raisons évidentes de sécurité et d'accès au fichier.

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
0
fanzy76 Messages postés 8 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 2 mars 2009
14 janv. 2009 à 11:20
Alors comment faire pour envoyer un mail avec pièce jointe sans modifier le php.ini?
Je bloque sur ce problème depuis deux jours, et je ne trouve aucune réponse sur différents forums.

voici le code:
$dossier = "/tmp/";
   $taille = $_FILES['size']['name'];
   $extensions = array('.png', '.gif', '.jpg', '.jpeg', 'txt', 'doc', 'pdf');
   $extension = strrchr($_FILES['cv']['name'], '.');
   $taille_maxi=3000000;   
   
   if(!is_uploaded_file($_FILES['cv']['tmp_name']))
   {
    $erreur = "Le fichier est introuvable";
   }
   else
   {
    if($taille>$taille_maxi)
    {
         $erreur = 'Le fichier est trop gros...';
    }
    if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
    {
        //On formate le nom du fichier ici...
        $fichier = strtr($_FILES['cv']['tmp_name'], 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
        $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     
        if(move_uploaded_file($_FILES['cv']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
        {
            //=====Déclaration des messages au format texte et au format HTML
      $message_html = "Recrutement:\r\n".$civilite." ".$nom." ".$prenom;
      $message_html .= "Recrutement:\r\n".$civilite." ".$nom." ".$prenom."\r\nTél: ".$tel."\r\n".$commentaires;
      //==========
      
      //=====Lecture et mise en forme de la pièce jointe
      /*$fichiers = fopen($dossier . $fichier, "r");
      $attachement = fread($fichiers, $taille);
      $attachement = chunk_split(base64_encode($attachement));
      fclose($fichiers);*/
      //==========
      
      //=====Création de la boundary
      $boundary = "-----=".md5(rand());
      $boundary_alt = "-----=".md5(rand());
      //==========
      
      //=====Définition du sujet
      $sujet = "Recrutement";
      //=========
      
      //=====Création du header de l'e-mail
      $header = "From: ".$nom." ".$prenom."<".$email.">\n";
      $header.= "Reply-to: ".$nom." ".$prenom."<".$email.">\n";
      $header.= "MIME-Version: 1.0\n";
      $header.= "Content-Type: multipart/mixed;\n boundary="$boundary"\n";
      //==========
      
      //=====Création du message
      $message = "\n--".$boundary."\n";
      $message.= "Content-Type: multipart/alternative;\n boundary="$boundary_alt"\n";
      $message.= "\n--".$boundary_alt."\n";
      
      //=====Ajout du message au format HTML
      $message.="Content-Type: text/plain; charset="iso-8859-1"\n";
      $message.="Content-Transfer-Encoding: 8bit\n";
      $message.= $message_html."\n";      
      //==========
      
      //=====On ferme la boundary alternative
      $message.= "\n--".$boundary_alt."--\n";
      //==========
      
      
      
      $message.= "\n--".$boundary."\n";
      
      //=====Ajout de la pièce jointe      
      //$message .= 'Content-Type: text/plain; name="'.$fichier."\n";
      $message .= 'Content-Transfer-Encoding: base64'."\n";
      $message .= 'Content-Disposition:attachement; filename="CV"'.$extension.''."\n\n";
      
      $message .= chunk_split(base64_encode(file_get_contents($dossier.$fichier)))."\n";
      //==========
      
      //=====Envoi de l'e-mail      
         if(mail("[mailto:yy@xx.fr",$sujet,$message,$header yy@xx.fr",$sujet,$message,$header]))
         {
             $erreur = 'Le mail a été envoyé';
         }
         else
         {
             $erreur = 'Le mail n\'a pu être envoyé';
         }
     }
     else
     {
      $erreur = "impossible de déplacer le fichier";
     }
    }
    else
    {
     echo $erreur;
    }
   }

Les warnings que j'obtiens sur le serveur distant sont :

Warning

: move_uploaded_file(/web/tmp/-tmp-phpnqulG3) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/www/7f07b10f0600c52fe8910da7b4848683/web/pgs/postuler.php on line 71

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpnqulG3' to '/web/tmp/-tmp-phpnqulG3' in /home/www/7f07b10f0600c52fe8910da7b4848683/web/pgs/postuler.php on line 71La ligne 71 fait référence à :  if(move_uploaded_file($_FILES['cv']['tmp_name'], $dossier . $fichier))

Merci quand même Teclis01 pour cette rapide réponse

  ça bug et y en a mar!  
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
14 janv. 2009 à 11:45
Facile. Change d'hébergeur >_<

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
0
fanzy76 Messages postés 8 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 2 mars 2009
14 janv. 2009 à 12:17
Si ça pouvait être aussi facil, malheureusement le client ne voudra pas!
Et en attendant, le site bug.
Y aurait pas une solution qui pourrait arranger tout le monde?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
14 janv. 2009 à 14:32
Yep!
Tu réponds à ce client que l'on ne peut pas faire ce genre de chose sur un hébergement gratuit (je me demande qui prendrait le risque de mettre un site ou il y a un applicatif important sur un hébergement gratos) on a les prestations à la hauteur du prix de l'hébergement.
S'il veut pas changer de host ou prendre un hébergement pro et bien ... C'est pas possible.

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
0