8795 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai créé un formulaire pour permettre aux visiteurs de formuler une demande, que je souhaite recevoir par mail.

Pour les données texte aucun soucis.

Je donne la possibilité au visiteur de télécharger une image, que je souhaite recevoir attachée au reste du mail.

Je ne sais si je m'y suis pris correctement, j'ai fait uploader le fichier sur un répertoire du serveur de mon site (upload/).

Je bloque sur le code permettant de récupérer ce fichier et de le recevoir par mail.

Si quelqu'un peut m'aider sur le bout de code à insérer, je lui serai très reconnaissant.

Merci.

<?php
if($_POST['action'] == 'submitted')
{
    $content_dir = 'upload/'; // dossier où sera déplacé le fichier
    $tmp_file = $_FILES['fichier']['tmp_name'];

    if( !is_uploaded_file($tmp_file) )
    {
        exit("Le fichier est introuvable");
    }

    // on vérifie maintenant l'extension
    $type_file = $_FILES['fichier']['type'];

    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif')  && !strstr($type_file, 'pdf') && !strstr($type_file, 'png'))
    {
        exit("Le fichier n'est pas une image");
    }

    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['fichier']['name'];

    if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
    {
        exit("Impossible de copier le fichier dans $content_dir");
    }
	
	$adress = "..@club-internet.fr";
	$sujet = "{$_POST['demande']}\n";
	$message = "Une demande a été postée depuis le formulaire en ligne d'Adhoc\n";
	$message .= "Nom : {$_POST['nom']}\nPrenom : {$_POST['prenom']}\nEntreprise : {$_POST['entreprise']}\nTelephone : {$_POST['telephone']}\nFax : {$_POST['fax']}\nE-mail : {$_POST['email']}\n";
	$message .= "Je suis intéressé(e) par : {$_POST['rubrique']}\n";
	$message .= "Mon projet : {$_POST['commentaires']}\n";
	$entete = "From: {$_POST['email']}\n";
	mail($adress, $sujet, $message, $entete, $motif );
	//page de sortie
	$insertGoTo = "http://www.adhoc-marquage.com/pages/confirmation_contact.htm";
	if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
    	$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
		$insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING'];
		}
	header(sprintf("Location: %s", $insertGoTo));
	
}
?>

Modifié par patamodeleur (04 Apr 2007 - 13:44)
ça n'a pas grand chose à voir avec les standards...

Allez, voici un qui marche plutôt bien :

class mime_mail 
{
 
  var $parts;
  var $to;
  var $from;
  var $headers;
  var $subject;
  var $body;

  // constructeur       
  function mime_mail()
  {
    
    $this->parts = array();
    $this->to =  "";
    $this->from =  "";
    $this->subject =  "";
    $this->body =  "";
    $this->headers =  "";
  
  }

  // attache un fichier au message
  function attach($message,$name,$ctype = '')
  {
            
    // type de contenu non defini
    if(empty($ctype)){
      // on essaie de reconnaitre l'extension     
      switch(strrchr(basename($name), ".")){ 
        case ".gz":   $ctype =  "application/x-gzip"; break;
        case ".tgz":  $ctype =  "application/x-gzip"; break;
        case ".zip":  $ctype =  "application/zip";    break;
        case ".pdf":  $ctype =  "application/pdf";    break;        
        case ".png":  $ctype =  "image/png";  break;
        case ".gif":  $ctype =  "image/gif";  break;
        case ".jpg":  $ctype =  "image/jpeg"; break;
        case ".txt":  $ctype =  "text/plain"; break;
        case ".htm":  $ctype =  "text/html";  break;
        case ".html": $ctype =  "text/html";  break;
        default:      $ctype =  "application/octet-stream"; break;
      }
    }

    $this->parts[] = 
                    array (
                      "ctype" => $ctype,
                      "message" => $message,
                    //  "encode" => $encode,
                      "name" => $name
                    );
    
    // fin de fonction
  }

  // fonction utilisee pour contruire le message MIME
  // utilisee depuis build_multipart()
  function build_message($part)
  {
  
    $message = $part[ "message"];
    $message = chunk_split(base64_encode($message));
    $encoding =  "base64";
    
    return  "Content-Type: ".$part[ "ctype"].
            ($part[ "name"]? "; name = \"".$part[ "name"]. "\"" :  "").
            "\nContent-Transfer-Encoding: $encoding\n\n$message\n";
  
  }

  // compose le message MIME
  // utilisee depuis send()
  function build_multipart() 
  {

    $boundary =  "b".md5(uniqid(time()));
    $multipart =  "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary";

    for($i = sizeof($this->parts) - 1; $i >= 0; $i--) 
    {
      $multipart .=  "\n".$this->build_message($this->parts[$i]). "--$boundary";
    }

    return $multipart.=  "--\n";

  }

  // envoie le message
  // derniere fonction a appeler 
  function send() 
  {

    $mime =  "";
    // parametres optionnels
    if (!empty($this->from))    $mime .=  "From: ".$this->from. "\n";
    if (!empty($this->headers)) $mime .= $this->headers. "\n";
    if (!empty($this->body))    $this->attach($this->body,  "",  "text/plain");
    // entete MIME
    $mime .=  "MIME-Version: 1.0\n".$this->build_multipart();
    // envoi du message
    mail($this->to, $this->subject,  "", $mime);
  
  }

}; // fin de la classe

// Exemple

// On commence par mettre dans une variable le fichier à attacher.
$fichier       = @fread(fopen($nomfichier, "r"), filesize($nomfichier));
    
// On crée une instance de cette classe
$mail          = new mime_mail();
// Définition des destinataires
$email         = "à_envoyer_à";
$mail->to      = $email;
// Titre du message
$mail->subject = "Subject";
$corps         = "corps";
$mail->body    = $corps;
// Définition de l'e-mail de l'expediteur ( paramètre optionnel )
$mail->from    = "expéditeur";
// Défintion des entêtes supplementaires ( paramètres optionnels )
$entetedate    = date("D, j M Y H:i:s -0700");
$entetemail = "X-Mailer: PHP/" . phpversion() . "\n";
$entetemail .= "Date: ";
$mail->headers = "$entetemail";
// Définition du fichier attache ( paramètre optionnel )
$mail->attach($fichier, $fichier_envoi);
// On envoie le message
$mail->send(); 


Pense à détruire le fichier temporaire stocké sur le serveur...
Merci.

Navré, mais le titre de la rubrique est "standards web et langages serveurs", pour moi le PHP entrait dans les cordes.