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

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


mahdivitche
WRInaute passionné
WRInaute passionné
 
Messages: 902
Inscription: Dim Jan 06, 2008 0:33

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

Message le Mar Juil 15, 2008 16:43

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: Tout sélectionner
include "libmail.php";//placez dans le repertoire courant donc...
$m= new Mail; // demarre l'email
$m->From( "contact@domaine.com" );// enlever les guillements pour placer une variable
$m->To( "contact@destinaire.com );//idem
$m->Subject( "Email avec attachement" );//idem
$message= "Veuillez trouver ci-joint votre test de francais";
$m->Body( $message); // corps du message
$m->Cc( "contact@autredomaine.com");//facultatif
$m->Bcc( "cache@autredomaine.com");//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


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 480
Inscription: Dim Avr 15, 2007 17:14

Message le Mar Juil 15, 2008 16:48

$m->Attach( "./testfr.doc", "application/msword" ) ; // définition du type mime du document joint image/gif


si tu remplace cette ligne par le bon nom de fichier / type mime, tu as tu formulaire pour tout type de fichier


mahdivitche
WRInaute passionné
WRInaute passionné
 
Messages: 902
Inscription: Dim Jan 06, 2008 0:33

Message le Mar Juil 15, 2008 17:29

seebz a écrit:
$m->Attach( "./testfr.doc", "application/msword" ) ; // définition du type mime du document joint image/gif


si tu remplace cette ligne par le bon nom de fichier / type mime, tu as tu formulaire pour tout type de fichier


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


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 5220
Inscription: Mer Nov 23, 2005 10:38

Message le Mar Juil 15, 2008 17:33

La solution serait de passer à une vraie classe d'envoi d'email, comme PHPMailer.

Hartas
WRInaute discret
WRInaute discret
 
Messages: 66
Inscription: Dim Nov 12, 2006 13:22

Message le Mer Juil 16, 2008 9:41

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.


Bacteries
WRInaute accro
WRInaute accro
 
Messages: 1333
Inscription: Jeu Mai 27, 2004 13:04

Message le Mer Juil 16, 2008 9:48

Ou suivre les conseils de UsagiYojimbo et pas réinventer la roue...


mahdivitche
WRInaute passionné
WRInaute passionné
 
Messages: 902
Inscription: Dim Jan 06, 2008 0:33

Message le Mer Juil 16, 2008 10:51

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: Tout sélectionner
<?
/* PARAMETRAGE DU SCRIPT */
/* ENTREZ VOTRE ADRESSE EMAIL ENTRE LES GUILLEMETS*/

$dest="monemail@hotmail.com";

$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 (mlemos@acm.org)
*                $address : email address to check
*/

function ValidEmail($address)
{
        if( ereg( ".*<(.+)>", $address, $regs ) ) {
                $address = $regs[1];
        }
         if(ereg( "^[^@  ]+@([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


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 5220
Inscription: Mer Nov 23, 2005 10:38

Message le Ven Juil 18, 2008 22:30

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/

hakimsoft
Nouveau WRInaute
 
Messages: 2
Inscription: Jeu Juin 11, 2009 2:24

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

Message le Jeu Juin 11, 2009 2:35

salut je cherche une formmail php mon formmail ça marche pas voila script
Code: Tout sélectionner
<?php
$TO = "megasoft.maroc@gmail.com";

$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 ....


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 5220
Inscription: Mer Nov 23, 2005 10:38

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

Message le Jeu Juin 11, 2009 6:24

Lis les posts du dessus. Il existe une classe PHP super simple d'utilisation pour envoyer un mail : PHPMailer.


screuscreu
WRInaute passionné
WRInaute passionné
 
Messages: 939
Inscription: Lun Jan 14, 2008 12:14

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

Message le Jeu Juin 11, 2009 7:17

<aveugle numéro 5>
UsagiYojimbo, tu ne connaîtrais pas une classe pour envoyer des mails ?
</aveugle>


spout
WRInaute accro
WRInaute accro
 
Messages: 1320
Inscription: Mer Mai 14, 2003 11:05

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

Message le Jeu Juin 11, 2009 8:31

PHPMailer ou plus récent (plus performant d'après ce que j'ai pu lire): http://swiftmailer.org/


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 5220
Inscription: Mer Nov 23, 2005 10:38

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

Message le Jeu Juin 11, 2009 9:10

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.


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités