script php qui permet d'envoie une pièce jointe vers email

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par mahdivitche, 15 Juillet 2008.

  1. mahdivitche
    mahdivitche WRInaute impliqué
    Inscrit:
    6 Janvier 2008
    Messages:
    869
    J'aime reçus:
    0
    Bonjour,
    je cherche un script qui permet d'envoie une pièce jointe vers un email via un formulaire ?
    (pièce jointe peut être n'importe fichier (txt.pdf.doc.gif.....)

    j'ai touve un script mais pour suelement les fichier word
    Code:
    include "libmail.php";//placez dans le repertoire courant donc... 
    $m= new Mail; // demarre l'email 
    $m->From( "[email protected]" );// enlever les guillements pour placer une variable 
    $m->To( "[email protected] );//idem 
    $m->Subject( "Email avec attachement" );//idem 
    $message= "Veuillez trouver ci-joint votre test de francais"; 
    $m->Body( $message); // corps du message 
    $m->Cc( "[email protected]");//facultatif 
    $m->Bcc( "[email protected]");//facultatif 
    $m->Priority(4) ; // Priorité Basse 
    $m->Attach( "./testfr.doc", "application/msword" ) ; // définition du type mime du document joint image/gif 
    $m->Send(); // mail envoyé 

    si vous pouvez me dépanner ça serait sympas.

    merci d'avance
     
  2. seebz
    seebz WRInaute impliqué
    Inscrit:
    15 Avril 2007
    Messages:
    722
    J'aime reçus:
    0
    si tu remplace cette ligne par le bon nom de fichier / type mime, tu as tu formulaire pour tout type de fichier
     
  3. mahdivitche
    mahdivitche WRInaute impliqué
    Inscrit:
    6 Janvier 2008
    Messages:
    869
    J'aime reçus:
    0
    oui mais il faut tester le type de fichier
    par exemple si un fichier word :
    $m->Attach( "./testfr.doc", "application/msword" ) ;

    si un fichier gif
    $m->Attach( "./testfr.doc", "image/gif" ) ;

    si un fichier pdf....



    alors comment faire pour tester le type de fichier ?
    et cmment definir tous les types ?

    merci d'avance
     
  4. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 018
    J'aime reçus:
    133
    La solution serait de passer à une vraie classe d'envoi d'email, comme PHPMailer.
     
  5. Hartas
    Hartas WRInaute discret
    Inscrit:
    12 Novembre 2006
    Messages:
    59
    J'aime reçus:
    0
    Salut,

    tu devrais te pencher vers file_info et plus précisement : finfo_file : http://fr.php.net/manual/fr/function.finfo-file.php

    si tu travailles qu'avec des images tu peux aussi utiliser getimagesize, qui pourra te retourner le type MIME. Attention pour des raisons de sécurité, il ne faut pas travailler uniquement sur les extensions.
     
  6. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    Ou suivre les conseils de UsagiYojimbo et pas réinventer la roue...
     
  7. mahdivitche
    mahdivitche WRInaute impliqué
    Inscrit:
    6 Janvier 2008
    Messages:
    869
    J'aime reçus:
    0
    Merci

    j'ai trouve un solution mais j'ai un petit probléme est que le fichier qu' arrive est vide (bidule.doc (0,0 Ko) )

    Code:
    <?
    /* PARAMETRAGE DU SCRIPT */
    /* ENTREZ VOTRE ADRESSE EMAIL ENTRE LES GUILLEMETS*/
    
    $dest="[email protected]"; 
    
    $reponse=StripSlashes("Entrez ici la réponse quand une personne envoie le formulaire");
    
    /* FIN DU PARAMETRAGE */
    
    
    /*
    
    Form Mail +
    Loïc Bresler
    Script permettant d'envoyer un mail grâce à un formulaire sur un site. Ce qu'il fait de plus que les autres
    c'est qu'il gère la priorité du message, les copies et permet d'envoyer un fichier joint si l'hébergeur le permet
    (en gros presque tous sauf Online et Nexen)
    Le script utilise une version de la classe Mail() développée par Leo West (lwest.free.fr) et modifiée par mes soins.
    
    
    
    DESCRIPTION
    
            this class encapsulates the PHP mail() function.
            implements CC, Bcc, Priority headers
    */
    
    
    
    class Mail
    {
    
            var $sendto= array();
            var $from, $msubject;
            var $acc= array();
            var $abcc= array();
            var $aattach= array();
            var $priorities= array( '1 (Highest)', '2 (High)', '3 (Normal)', '4 (Low)', '5 (Lowest)' );
    
    
    // Mail contructor
    
    function Mail()
    {
            $this->autoCheck( true );
    }
    
    
    /*                autoCheck( $boolean )
     *                activate or desactivate the email addresses validator
     *                ex: autoCheck( true ) turn the validator on
     *                by default autoCheck feature is on
     */
    
    function autoCheck( $bool )
    {
            if( $bool )
                    $this->checkAddress = true;
            else
                    $this->checkAddress = false;
    }
    
    
    /*                Subject( $subject )
     *                define the subject line of the email
     *                $subject: any valid mono-line string
     */
    
    function Subject( $subject )
    {
            $this->msubject = strtr( $subject, "\r\n" , "  " );
    }
    
    
    /*                From( $from )
     *                set the sender of the mail
     *                $from should be an email address
     */
    
    function From( $from )
    {
    
            if( ! is_string($from) ) {
                    echo "Class Mail: error, From is not a string";
                    exit;
            }
            $this->from= $from;
    }
    
    
    /*                To( $to )
     *         set the To ( recipient )
     *                $to : email address, accept both a single address or an array of addresses
     */
    
    function To( $to )
    {
    
            // TODO : test validité sur to
            if( is_array( $to ) )
                    $this->sendto= $to;
            else
                    $this->sendto[] = $to;
    
            if( $this->checkAddress == true )
                    $this->CheckAdresses( $this->sendto );
    
    }
    
    
    /*                Cc()
     *                set the CC headers ( carbon copy )
     *                $cc : email address(es), accept both array and string
     */
    
    function Cc( $cc )
    {
            if( is_array($cc) )
                    $this->acc= $cc;
            else
                    $this->acc[]= $cc;
    
            if( $this->checkAddress == true )
                    $this->CheckAdresses( $this->acc );
    
    }
    
    
    
    /*                Bcc()
     *                set the Bcc headers ( blank carbon copy ).
     *                $bcc : email address(es), accept both array and string
     */
    
    function Bcc( $bcc )
    {
            if( is_array($bcc) ) {
                    $this->abcc = $bcc;
            } else {
                    $this->abcc[]= $bcc;
            }
    
            if( $this->checkAddress == true )
                    $this->CheckAdresses( $this->abcc );
    }
    
    
    /*                Body()
     *                set the body of the mail ( message )
     */
    
    function Body( $body )
    {
            $this->body= $body;
    }
    
    
    /*                Send()
     *                fornat and send the mail
     */
    
    function Send()
    {
            // build the headers
            $this->_build_headers();
    
            // include attached files
            if( sizeof( $this->aattach > 0 ) ) {
                    $this->_build_attachement();
                    $body = $this->fullBody . $this->attachment;
            }
    
            // envoie du mail aux destinataires principal
            for( $i=0; $i< sizeof($this->sendto); $i++ ) {
                    $res = mail($this->sendto[$i], $this->msubject,$body, $this->headers);
                    // TODO : trmt res
            }
    
    }
    
    
    /*                Organization( $org )
     *                set the Organisation header
     */
    
    function Organization( $org )
    {
            if( trim( $org != "" )  )
                    $this->organization= $org;
    }
    
    
    /*                Priority( $priority )
     *                set the mail priority
     *                $priority : integer taken between 1 (highest) and 5 ( lowest )
     *                ex: $m->Priority(1) ; => Highest
     */
    
    function Priority( $priority )
    {
    
            if( ! intval( $priority ) )
                    return false;
    
            if( ! isset( $this->priorities[$priority-1]) )
                    return false;
    
            $this->priority= $this->priorities[$priority-1];
    
            return true;
    
    }
    
    
    /*                Attach( $filename, $filetype )
     *                attach a file to the mail
     *                $filename : path of the file to attach
     *                $filetype : MIME-type of the file. default to 'application/x-unknown-content-type'
     *                $disposition : instruct the Mailclient to display the file if possible ("inline") or always as a link ("attachment")
     *                        possible values are "inline", "attachment"
     */
    
    function Attach( $filename, $filetype='application/x-unknown-content-type', $disposition = "inline" )
    {
            // TODO : si filetype="", alors chercher dans un tablo de MT connus / extension du fichier
            $this->aattach[] = $filename;
            $this->actype[] = $filetype;
            $this->adispo[] = $disposition;
    }
    
    
    /*                Get()
     *                return the whole e-mail , headers + message
     *                can be used for displaying the message in plain text or logging it
     */
    
    function Get()
    {
            $this->_build_headers();
            if( sizeof( $this->aattach > 0 ) ) {
                    $this->_build_attachement();
                    $this->body= $this->body . $this->attachment;
            }
            $mail = $this->headers;
            $mail .= "\n$this->body";
            return $mail;
    }
    
    
    /*         ValidEmail( $email )
     *         return true if email adress is ok - regex from Manuel Lemos ([email protected])
     *                $address : email address to check
     */
    
    function ValidEmail($address)
    {
            if( ereg( ".*<(.+)>", $address, $regs ) ) {
                    $address = $regs[1];
            }
             if(ereg( "^[^@  ][email protected]([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)\$",$address) )
                     return true;
             else
                     return false;
    }
    
    
    /*                CheckAdresses()
     *         check validity of email addresses
     *         if unvalid, output an error message and exit, this may be customized
     *                $aad : array of emails addresses
     */
    
    function CheckAdresses( $aad )
    {
            for($i=0;$i< sizeof( $aad); $i++ ) {
                    if( ! $this->ValidEmail( $aad[$i]) ) {
                            echo "Class Mail, method Mail : invalid address $aad[$i]";
                            exit;
                    }
            }
    }
    
    
    /********************** PRIVATE METHODS BELOW **********************************/
    
    
    
    /*                _build_headers()
     *                 [INTERNAL] build the mail headers
     */
    
    function _build_headers()
    {
    
            // creation du header mail
    
            $this->headers= "From: $this->from\n";
    
            $this->to= implode( ", ", $this->sendto );
    
            if( count($this->acc) > 0 ) {
                    $this->cc= implode( ", ", $this->acc );
                    $this->headers .= "CC: $this->cc\n";
            }
    
            if( count($this->abcc) > 0 ) {
                    $this->bcc= implode( ", ", $this->abcc );
                    $this->headers .= "BCC: $this->bcc\n";
            }
    
            if( $this->organization != ""  )
                    $this->headers .= "Organization: $this->organization\n";
    
            if( $this->priority != "" )
                    $this->headers .= "X-Priority: $this->priority\n";
    
    }
    
    
    
    /*
     *                _build_attachement()
     *                internal use only - check and encode attach file(s)
    */
    function _build_attachement()
    {
            $this->boundary= "------------" . md5( uniqid("myboundary") ); // TODO : variable bound
    
            $this->headers .= "MIME-Version: 1.0\nContent-Type: multipart/mixed;\n boundary=\"$this->boundary\"\n\n";
            $this->fullBody = "This is a multi-part message in MIME format.\n--$this->boundary\nContent-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bit\n\n" . $this->body ."\n";
            $sep= chr(13) . chr(10);
    
            $ata= array();
            $k=0;
    
            // for each attached file, do...
            for( $i=0; $i < sizeof( $this->aattach); $i++ ) {
    
                    $filename = $this->aattach[$i];
                    $basename = basename($filename);
                    $ctype = $this->actype[$i];        // content-type
                    $disposition = $this->adispo[$i];
    
                    if( ! file_exists( $filename) ) {
                            echo "Class Mail, method attach : file $filename can't be found"; exit;
                    }
                    $subhdr= "--$this->boundary\nContent-type: $ctype;\n name=\"$basename\"\nContent-Transfer-Encoding: base64\nContent-Disposition: $disposition;\n  filename=\"$basename\"\n";
                    $ata[$k++] = $subhdr;
                    // non encoded line length
                    $linesz= filesize( $filename)+1;
                    $fp= fopen( $filename, 'r' );
                    $data= base64_encode(fread( $fp, $linesz));
                    fclose($fp);
                    $ata[$k++] = chunk_split( $data );
    
    /*
                    // OLD version - used in php < 3.0.6 - replaced by chunk_split()
                    $deb=0; $len=76; $data_len= strlen($data);
                    do {
                            $ata[$k++]= substr($data,$deb,$len);
                            $deb += $len;
                    } while($deb < $data_len );
    
    */
            }
            $this->attachment= implode($sep, $ata);
    }
    
    
    } // class Mail
    
    $subject=StripSlashes($subject);
    $msg=StripSlashes($msg);
    $msg="Message depuis votre site web:
    $msg";
    $m= new Mail; // create the mail
            $m->From( "$email" );
            $m->To( "$dest");     
            $m->Subject( "$subject" );
            $m->Body( $msg);        // set the body
    if ($email1!="") {
            $m->Cc( "$email1");
    	}
            $m->Priority($priority) ;   
    if ("$NomFichier_name"!="") {
    	copy("$NomFichier","../upload/$NomFichier_name");
    	$m->Attach( "../upload/$NomFichier_name", "application/octet-stream" );
    	}
            $m->Send(); 
    if ("$NomFichier_name"!="") {
    Unlink("../upload/$NomFichier_name");   }     
    echo "$reponse";
    
    ?>
    Merci d'avance
     
  8. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 018
    J'aime reçus:
    133
    Je te conseille sincèrement de te tourner vers PhpMailer, qui gère vraiment très bien et de manière facile à utiliser l'envoi de mail (avec PJ ou non, en HTML, etc). Là tu pars d'un script qui date de 2004, et que plus grand monde ne doit utiliser. Envoyer un mail avec PJ en utilisant PHPMailer, c'est 4-5 lignes de codes (après inclusion de la classe).

    http://phpmailer.codeworxtech.com/
     
  9. hakimsoft
    hakimsoft Nouveau WRInaute
    Inscrit:
    11 Juin 2009
    Messages:
    2
    J'aime reçus:
    0
    salut je cherche une formmail php mon formmail ça marche pas voila script
    Code:
    <?php 
    $TO = "[email protected]"; 
    
    $h = "From: " . $TO; 
    
    $message = ""; 
    
    while (list($key, $val) = each($HTTP_POST_VARS)) { 
    $message .= "$key : $val\n"; 
    } 
    
    mail($TO, $subject, $message, $h); 
    
    Header("Location: http://jolair.ma/sm1/merci.html"); 
    
    ?>
    merci ....
     
  10. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 018
    J'aime reçus:
    133
    Lis les posts du dessus. Il existe une classe PHP super simple d'utilisation pour envoyer un mail : PHPMailer.
     
  11. screuscreu
    screuscreu WRInaute impliqué
    Inscrit:
    14 Janvier 2008
    Messages:
    687
    J'aime reçus:
    0
    <aveugle numéro 5>
    UsagiYojimbo, tu ne connaîtrais pas une classe pour envoyer des mails ?
    </aveugle>
     
  12. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 207
    J'aime reçus:
    365
  13. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 018
    J'aime reçus:
    133
    On va finir par croire que je suis le développeur de PHPMailer, mais je n'en suis qu'un utilisateur pour le moins satisfait.
     
Chargement...
Similar Threads - script php permet Forum Date
Script php ou js qui permet de telecharger un video youtube,dailymotion via son url sur se Développement d'un site Web ou d'une appli mobile 4 Mai 2012
Script php permettant de rechercher des vidéos sur internet Développement d'un site Web ou d'une appli mobile 10 Septembre 2007
je cherche un script php permettant de crer des blogs Développement d'un site Web ou d'une appli mobile 4 Novembre 2005
Script PHP permettant de gérer des images Administration d'un site Web 29 Janvier 2005
Bien gérer un script PHP un peu long Développement d'un site Web ou d'une appli mobile 12 Octobre 2022
Sites de scripts PHP, jQuery, Ajax, etc. Le café de WebRankInfo 20 Mars 2022
Détecter arrêt user d'un script PHP ? Développement d'un site Web ou d'une appli mobile 28 Décembre 2021
Actualiser un script php toutes les 10 secondes Développement d'un site Web ou d'une appli mobile 6 Septembre 2021
Quel script PHP conversion HTML -> JSON ? Développement d'un site Web ou d'une appli mobile 17 Février 2021
script PHP erreurs inexplicables. Développement d'un site Web ou d'une appli mobile 14 Février 2021
Du php dans du javascript Développement d'un site Web ou d'une appli mobile 16 Novembre 2020
Title et meta déscription par PHP Référencement Google 20 Décembre 2019
PHP : script pour mettre catalogue xml clickbank dans mysql Développement d'un site Web ou d'une appli mobile 6 Décembre 2017
Créer des graphiques en php - Vers quel script se tourner ? Développement d'un site Web ou d'une appli mobile 19 Octobre 2017
Quel package/script PHP complet de gestion Paypal ? e-commerce 13 Juin 2017
Quel script de consentement <=> tarteaucitron en pur php ? Développement d'un site Web ou d'une appli mobile 19 Août 2016
Script php rotation de bannière ordonné Développement d'un site Web ou d'une appli mobile 4 Avril 2016
Script de crawl en php Développement d'un site Web ou d'une appli mobile 3 Août 2015
Code Javascript s'affiche différemment en php et en html Développement d'un site Web ou d'une appli mobile 8 Décembre 2014
Script php Programme TV en cours Développement d'un site Web ou d'une appli mobile 30 Juillet 2014