begin process at 2012 02 13 06:54:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

E-Mail / Messagerie

 > FORMULAIRE EMAIL AVEC PIECE JOINTE

FORMULAIRE EMAIL AVEC PIECE JOINTE


 Information sur la source

Note :
9,06 / 10 - par 17 personnes
9,06 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :E-Mail / Messagerie Niveau :Initié Date de création :06/05/2004 Vu / téléchargé :72 135 / 5 998

Auteur : LiTtLeBuBu

Ecrire un message privé
Commentaire sur cette source (112)
Ajouter un commentaire et/ou une note

 Description

Formail +


//Utilise une partie la classe Mail écrite par Léo West

Ce script met un formulaire sur son site qui permet aux visiteurs d'envoyer un email au webmaster
via un formulaire.
La nouveauté est que ce script permet au visiteur de mettre un fichier joint avec son message.
Le fichier joint est uploadé sur le serveur puis détruit une fois le mail envoyé.

INSTALLATION

Ce script ne fonctionne pas sous Online ou Nexen (et ne fonctionnera d'ailleurs jamais sur ces serveurs. J'ai
tout essayé et j'ai contacté le support technique, ils ont tellement bien modifié leur fonction email()
qu'il est impossible de l'utiliser avec ce script)

Créer un répertoire et uploader les deux fichiers dedans
Dans le fichier formail.php remplacer dans la ligne $dest="..." l'adresse email par la votre

Créer un répertoire "upload" au même niveau que le répertoire que vous avez créé (pas dedans, à côté :-) )

Et voila...

Source

  • // le code de la form.html
  • <form vname="FormName" action="formmail.php" method="post" enctype="multipart/form-data" name="form">
  • <table border="0" cellpadding="5" cellspacing="0" width="137">
  • <tr>
  • <td>Exp&eacute;diteur:</td>
  • <td><input type="text" name="email" size="35"></td>
  • </tr>
  • <tr>
  • <td>Sujet</td>
  • <td><input type="text" name="subject" size="35"></td>
  • </tr>
  • <tr>
  • <td>Message</td>
  • <td><textarea rows="12" name="msg" cols="60"></textarea></td>
  • </tr>
  • <tr>
  • <td>Fichier joint:</td>
  • <td><input type="hidden" name="MAX_FILE_SIZE" value="100000"><input name="NomFichier" type="file" size="16"></td>
  • </tr>
  • <tr>
  • <td>Priorit&eacute;:</td>
  • <td>
  • <div align="left">
  • <select name="priority" size="1">
  • <option value="1">Urgent
  • <option value="2">Haute
  • <option value="3">Moyenne
  • <option value="4">Basse
  • <option value="5">Tr&egrave;s basse
  • </select> <input type="submit" value="Envoyer"></div>
  • </td>
  • </tr>
  • </table>
  • </form>
  • // code de formail.php
  • <?
  • /* PARAMETRAGE DU SCRIPT */
  • /* ENTREZ VOTRE ADRESSE EMAIL ENTRE LES GUILLEMETS*/
  • $dest="email@email.fr";
  • $reponse=StripSlashes("Entrez ici la réponse quand une personne envoie le formulaire");
  • /* FIN DU PARAMETRAGE */
  • /*
  • Le script utilise une version de la classe Mail() développée par Leo West (lwest.free.fr)
  • 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";
  • ?>
// le code de la form.html

<form vname="FormName" action="formmail.php" method="post" enctype="multipart/form-data" name="form">
<table border="0" cellpadding="5" cellspacing="0" width="137">
	<tr>
		<td>Exp&eacute;diteur:</td>
		<td><input type="text" name="email" size="35"></td>
	</tr>
	<tr>
		<td>Sujet</td>
		<td><input type="text" name="subject" size="35"></td>
	</tr>
	<tr>
		<td>Message</td>
		<td><textarea rows="12" name="msg" cols="60"></textarea></td>
	</tr>
	<tr>
		<td>Fichier joint:</td>
		<td><input type="hidden" name="MAX_FILE_SIZE" value="100000"><input name="NomFichier" type="file" size="16"></td>
	</tr>
	<tr>
		<td>Priorit&eacute;:</td>
		<td>
			<div align="left">
				<select name="priority" size="1">
					<option value="1">Urgent
					<option value="2">Haute
					<option value="3">Moyenne
					<option value="4">Basse
					<option value="5">Tr&egrave;s basse
				</select> <input type="submit" value="Envoyer"></div>
		</td>
	</tr>
</table>
</form>

// code de formail.php
<?
/* PARAMETRAGE DU SCRIPT */
/* ENTREZ VOTRE ADRESSE EMAIL ENTRE LES GUILLEMETS*/

$dest="email@email.fr";

$reponse=StripSlashes("Entrez ici la réponse quand une personne envoie le formulaire");

/* FIN DU PARAMETRAGE */


/*


Le script utilise une version de la classe Mail() développée par Leo West (lwest.free.fr)



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";

?>


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip PHPMYNEWSLETTER V0.6.10 PAR GRÉGORY KOKANOSKY

 Sources de la même categorie

Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ... par cod57
Source avec Zip Source avec une capture FORMULAIRE VERS COURRIEL BASIQUE AVEC CONTRÔLE CAPTCHA ANTI ... par cod57
Source avec Zip CHAT EN PHP ET JQUERY par pitchoubrazil
Source avec Zip Source avec une capture FORMULAIRE DE CHOIX MULTI-CONTACT VALIDE XHTML 1.0 TRANSITIO... par aventurier19
Source avec Zip Source avec une capture WEB MESSENGER par EvildarkEurope

Commentaires et avis

Commentaire de Skwal le 06/05/2004 20:49:10

c'est connu....

Commentaire de level le 06/05/2004 21:37:48

Fonctionne pas ...
Class Mail, method attach : file ../upload/essai.gif can't be found

Commentaire de LiTtLeBuBu le 06/05/2004 21:48:35

il faut creer le dossier upload et donner les droits en ecriture

Commentaire de level le 06/05/2004 21:57:14

c'est ce que j'ai fait et ca fonctionne pas.

Commentaire de LiTtLeBuBu le 07/05/2004 10:20:59

Chez moi marhce tres bien avec un copier coller de ce script

Commentaire de LiTtLeBuBu le 07/05/2004 10:36:58

1_Créer un répertoire et uploader les deux fichiers dedans
Dans le fichier formail.php remplacer dans la ligne $dest="..." l'adresse email par la votre.
Créer un répertoire "upload" au même niveau que le répertoire que vous avez créé (pas dedans, à côté :-) )
Accorder les permissions de lecture et écriture à ce répertoire (chmod 777)

2_Ce script ne fonctionne pas sous Online ou Nexen (et ne fonctionnera d'ailleurs jamais sur ces serveurs. J'ai tout essayé et j'ai contacté le support technique, ils ont tellement bien modifié leur fonction email() qu'il est impossible de l'utiliser avec ce script).

3_J'ai une erreur commençant par "Warning: Unable to create '../upload/..." lorsque je teste le script?
Vérifiez que le répertoire "upload" soit avec les bons droits, et que le fichier test ne soit pas trop gros. La plupart des hébergeurs limitent la taille maximale des fichiers uploadé à 2Mo.


J'ai une erreur: "Warning: Max file size of 0 bytes exceeded - file [NomFichier] not saved in Unknown on line 0"
C'est que votre hébergeur n'accepte pas les uploads de fichiers (envois de fichiers sur le serveur). Vous ne pouvez rien faire à part:

- Changer d'hébergeur

- Utiliser Sendmail présent sur ce site dans la rubrique Webmaster


J'ai une erreur "mail()"
Vérifiez que votre hébergeur n'ai pas désactivé la fonction mail()

NB: en local, il faut que vous ayez un serveur SMTP installé et correctement configuré pour que cela fonctionne.

Comment ajouter des champs dans le formulaire?
Si vous avez un champs telephone par exemple (en precisant bien le nom comme ceci dans le formulaire:
&lt;input type='text' name='telephone'&gt;
Trouvez la ligne suivante en bas du script:
$msg="Message depuis votre site web:
$msg";
Pour le récupérer il suffit de remplacer ces lignes par:
$msg="Message depuis votre site web:
$msg &lt;br&gt;
Téléphone: $telephone";
Vous pouvez ajouter ainsi autant de champs que vous voulez. Pour les afficher dans le mail envoyer il suffit de reprendre le nom du champs avec un $ devant.

Peut-on améliorer la page sur laquelle tombe le visiteur après avoir soumis un mail?
La ligne suivante définie ce qui va être affiché lorsque le visiteur aura soumis un mail:
$reponse=StripSlashes("Entrez ici la réponse quand une personne envoie le formulaire");
Le message qu'il y a entre guillemets peut contenir du HTML et du Javascript. Vous pouvez même intégrer tout le code d'une page HTML faite séparement.
La seule restriction: pas de guillemets seuls dans ce code. Si votre HTML est généré par un éditeur HTML, remplacez tous les guillemets " par la combinaison antislash-guillemet \"


Commentaire de level le 07/05/2004 17:07:38

Quand j'ai dit que ca ne marchais pas j'avais déjà vérifier les 3 premières étapes et ca ne fonctionne pas un point c'est tout.

Commentaire de triumphs le 30/05/2004 03:28:05

&gt; LiTtLeBuBu

Salut!
Tout comme 'level', je n'arrivais pas à fair emarcher ton conde. J'ai tester deux autres méthodes (pas plus de succès!) et j'en ai fait un pot pourri... ...

Il s'avère que ta méthode est fonctionne (en tout cas pour moi) si l'on corrige quelque peu les lignes où tu fais l'attachement:

[Ta version]
if ("$NomFichier_name"!="") {
    copy("$NomFichier","../upload/$NomFichier_name");
    $m-&gt;Attach( "../upload/$NomFichier_name", "application/octet-stream" );
    }
        $m-&gt;Send();
if ("$NomFichier_name"!="") {
unlink("../upload/$NomFichier_name");    }  

[Ma version]
if ("$NomFichier"!="") {
    $name = $HTTP_POST_FILES['NomFichier']['name'];

    if (is_uploaded_file($NomFichier)) {
      copy($NomFichier, "../upload/$name");
    }

    $m-&gt;Attach( "../upload/$name", "application/octet-stream" );
}

$m-&gt;Send();

if ("$NomFichier"!="") {
    Unlink("../upload/$NomFichier");
}

Comme tu peux le voir, je n'ai pas changer grand chose à ta version, mais ceci évite la fameuse erreur:
"Class Mail, method attach : file ../upload/file.ext can't be found "

Bonne continuation!

Commentaire de level le 30/05/2004 03:32:24

Merci à toi, ca fait plaisir d'avoir un script FONCTIONNEL.

Commentaire de jmvd2 le 01/06/2004 20:43:06

Pour ce script ne changes rien, pour ma part ça marche.
Seul truc
Créer deux répertoires soit en racine, mais pour une meilleure organisation, je les ai créés dans un autre répertoire.
ex:
\mail\forms
\mail\upload (n'oubliez pas d'autoriser les droits en écriture sur ce répertoire)

Dans "forms" coller les deux fichiers :
- form.html
- formmail.php (n'oubliez pas le paramétrage de ce fichier)

Et tout va pour le mieux dans le meilleur des mondes .. :-))
@+

Commentaire de masterpingouin le 23/06/2004 19:49:36

Je suis chez multimania et je sais pas si j'ai un serveur smtp, mais en tout cas j'ai le message d'erreure suivant:
lass Mail, method attach : file ../upload/test.jpeg can't be found
Portant, j'ai fais le bordel avec le fichier upload:!!!!
Help me please!!
MERCI

Commentaire de boby2222 le 02/07/2004 05:33:27

POur ma part avec le code réviser de M.triumphs je click sur envoyer et il ya aucun message d'erreur (tout est normale) mais la seul chose c'est que je ne recoit pas le fichier que j'ai uploader.

les répertoire sont en code chmod 777
je recoit un mail mais pas de fichier joint.

Comprenez vous quelque chose la dedans en t k moi rien déja que je ne suis pas un génie dans le php

Merci de bien vouloir m'expliquer quoi faire.

Commentaire de boby2222 le 02/07/2004 05:43:20

Bon je rectifie mon message: Je suis incapable d'acceder au fichier joint avec la messagerie microsoft outlook mais avec la messagerie de mon hebergeur sa marche (j'ai le fichier joint).

Savez vous pouquoi? Ou il y a tu un moyen de corriger ce probleme pour que je continue d'utiliser outlook ou bien il y a tu un autre programme de messagerie du meme genre que outlook ou je retourne sur la messagerie de men serveur et ca me tente pas :(

Commentaire de boby2222 le 02/07/2004 05:55:22

vous allez me trouver très fatigant voir très très fatigant mais moi ca me dérange pas. Vous allez me trouver nul mais ca me dérange pas bref je me fou de se que vous pensez de mes compétance en la matière. deuxième bref laisser tomber les 2 message du haut j'étais completement dans le champ quand j'ai écris c'est message. c'est correcte le code fonctionne a merveille vous etes des génie (en particulier M.LiTtLeBuBu et M.triumphs) et moi je suis celui quui frotte la lampe. vous me suivez?. Si vous avez repondu non vous pouvez aretter de lire car il y a plus rien d'interressant a lire sur ce message a part que merci encore au génie de la lampe ainsi qu'à tout ceux qui ont lu le message jusqu'au bout car il était rempli de connerie initile et qui sert a rien. Merci.

Commentaire de Titigre le 20/07/2004 16:03:34

pour ma part, j'ai un petit probleme, j'ai bien le fichier joint mais il perd 19 octetset il est impossible a lire. j'ai vérifié la taille du fichier a plusieurs reprises dans la code toujours, la meme taille, c'est lors du transfert qu'il doit y avoir un probleme. connaissez vous ce problème surtout que je suis en local donc pas de problème avec le serveur !!!
Aidez moi c'est la quatrieme versions que j'essaie en 3 jours et toujours le meme resultat, j'en peux plus !!!!!!!!

help me please
Titigre

Commentaire de boby2222 le 26/07/2004 07:09:25

peut etre la taille de ton fichier que tu upload est trop lourd. je ne sais pas si tu sais qu'on peut seulement envoyer des fichier de moins de 2 mb (je pense lol :D). te reste t'il de la plache sur ton serveur? des fois on sait jamais sinon je n'ai aucune idée sur la nature de ton probleme

Commentaire de Varod le 26/07/2004 12:46:11

salut!
De mon coté le script est fonctionnel (sous lycos) :o)

Cependant, j'ai un tit pb concernant les super nouveautes : les anti-spams!
Je voudrai donc savoir s'il y a une possibilité pr ne pas recevoir le mail annoté de la mention SPAM.

Merci

Vince.

Commentaire de fa0007 le 30/07/2004 16:20:50

Ce serait pour savoir comment on donne le droit a l'écriture du fichier upload sous ifrance car je suis vraiment nouveau en php merci de me repondre ....

FéLi 'Z

Commentaire de boby2222 le 03/08/2004 05:43:37

je ne sais pas sur ifrance mais surement que si tu clique avec le bouton de droit sur le fichier "upload" et ensuite propriété. ou quelque part ou il y a les propriétédu dossier. ensuite tu met les chmod a 777 ou si ces des case a cocher , coche les toute. si tu ne trouve pas comment peut-etre que tu peut pas parceque ifrance c'est un hébergeur gratuit et il peuve l'avoir bloquer.  dans ce cas si tu devra upgrader ton hébergement et te diriger vers le payant comme j'ai fait.

Commentaire de karamelo le 13/08/2004 00:52:15

moi c'est les validations des adresses mails q j'ai du mal
ça passe meme si les champs son vides !!!

Commentaire de karamelo le 13/08/2004 01:02:04

desole j'ai app un peu fort sur  bouton

Commentaire de boby2222 le 13/08/2004 16:56:24

oui c'est sur que si tu clique sur envoyer meme si les champ son vide tu vas recevoir un message vide. il y a rien qui dit qu'on a oublier de remplir les champ.

je sais pas si c'st ca que tu voulais dire. sinon ce n'etait pas clair pour moi

Commentaire de karamelo le 13/08/2004 20:13:28

j'essaie de comprendre le script  c'est les parties//  function ValidEmail  CheckAdresses// je ne vois pas trop coment ça fonctione ça bloque rien du tout si une fausse adresse est dans le champ email,  il me semble que d'autres parties ne serve a rien pour  envoyer les donnes du formulaire

/////tapez pas trop fort je suis vraiment  debutant ////////

Commentaire de gabyone le 17/08/2004 16:52:21

Salut à tous, une question d'un non développeur PHP
Quelqu'un sait -il comment limiter la taille des fichiers uploader?

Commentaire de boby2222 le 17/08/2004 19:34:10

il est déjas limiter sur le script je pense qu'il est limiter a 1 mb mais de toute facon le max qu'on peut uploader c'est 2mb . si ca dépasse ce 2 mb le fichier ne sera pas envoyer.  si tu veut la changer la portion de code dans le "form.html":

<td>Fichier joint:</td>
<td><input type="hidden" name="MAX_FILE_SIZE" value="100000"><input name="NomFichier" type="file" size="16"></td>

change le value ="100000" pour la grosseur que tu veut. c'est en octets. Essaye d,envoyer un fichier plus gros que le "value"  pour voir si c'est bien cala. parce que des fois je peut me tromper.... mais pas souvant loll :)

Commentaire de karamelo le 17/08/2004 20:11:07

je suis toujours dans le noir au sujet du controle des champs du formulaire en relation au script
les "gros bras  du php " sont partis en vacances :-(

Commentaire de boby2222 le 21/08/2004 06:27:25

l dessus je ne peut pas trop te repondre car C'est pâs moi qui fait la source mais je peut te donner un vieu code qui vérifie si les champs ont été remplie:(a toi te le mettre dans cette source pour que sa fonctionne. redonne des nouvelle si sa marche ou pas.)



<?

$MailTo = "user@monsite.com";
$MailSubject = "titre du message";
$MailHeader = "adresse"; //adresse email qui va figurer dans le champ "expéditeur" du email et qui peut être remplacé par la variable "$champx" ("$champ3").

$Envoi = 1; //initialisation de la variable envoi à 1

if ($form == ""){ //nom du champ1
echo("<font face=verdana size=2>Veillez remplir le formulaire.</font><br><br>");
$Envoi = 0;
}
else {
$MailBody = "form : $name\n"; //si le champ1 contient de l'information, elle est stockée dans la variable MailBody
}
if ($Envoi == 0) echo("<p>&nbsp;</p><p>&nbsp;</p><p align=\"center\"><A HREF=\"#\" onClick=\"history.go(-1);return(false)\"><strong>Retour</strong></a></p>");
//Envoi du message

if ($Envoi == 1) { //vérification que la variable envoi est bien à 1
mail($MailTo, $MailSubject, $MailBody, $MailHeader); //envoi du message
echo("<p><font face=verdana size=2>Votre message a bien été envoyé.<br>Merci.</font>"); echo("<p>&nbsp;</p><p>&nbsp;</p><p align=\"center\"><A HREF=\"#\" onClick=\"history.go(-1);return(false)\"><strong>Retour</strong></a></p>"); //affichage d'un message de confirmation.
}
?>

Commentaire de karamelo le 21/08/2004 12:34:23

merci pour ton aide!!!
quand je vais avoir un peu de temps je vais tester tout ça
pour voir si j'arrive et le faire marcher

encore merci

Commentaire de francis9 le 04/02/2005 12:06:09

Bonjour,
Je suis trés trés débutant!!!
J'essaye d'utiliser cette application, j'ai installé suivant les instructions fournies, mais chaque fois que je clique sur "envoyer", le systéme me demande de charger formmail.php???
J'ai fait ce test sur wanadoo et sur easyphp.
Quelle personne bienveillante voudrait bien aider un beotien?
Merci.

Commentaire de cyberjosee le 17/02/2005 21:54:00

Ouf! C'est pas évident le php.

J'ai testé le code, j'ai eu l'erreur method attach : file ../upload/essai.gif can't be found

Ensuite j'ai effectuer la correction de Triumph

et ca marche toujours pas. Là j'ai :

Parse error: parse error in /home/httpd/vhosts/mausolee.ca/httpdocs/form/formmail.php on line 393

et voici le contenu de la ligne 393:

$m-&gt;Attach( "../upload/$name", "application/octet-stream" );

Vous pouvez m'aider?

Merci
Cyberjosee

Commentaire de triumphs le 17/02/2005 23:49:10

Bon, je vois qu'il y a encore une erreur dans ce code; je vais jeter un coup d'oeil à ce que j'ai codé (ça risque de prendre du temps, car pas mal de petites 'modifications-gadget' ont été apportées depuis que j'ai écrit ce code)... ...

Commentaire de triumphs le 18/02/2005 00:07:16

A première vue, il n'y a qu'une seule faute qui apparait dans ce que j'avais écrit auparavant; en effet, la commande 'unlink' ne doit pas s'effectuer sur 'nomFichier', mais sur 'name'... ... ce qui a, somme toute, un peu plus de sense:

[Ancienne version]
...
if ("$NomFichier"!="") {
    Unlink("../upload/$NomFichier");
}
...
[Correction]
...
if ("$NomFichier"!="") {
    Unlink("../upload/$name");
}
...

Pour l'instant, je ne sais pas si ceci règle le problème de 'cyberjosee', mais c'est le seul détail qui m'est apparu lorsque que j'ai relu mon message.

Essayer d'effectuer un test avec cette correction sans oublier de créer, à l'avance, le répertoire temporaire pour l'upload et d'y ajouter tous les droits d'accès. Si le test réussi, supprimer les droits afin de ne laisser que ceux qui sont nécessaires (pas besoin de laisser la porte ouverte à n'importe quoi).

Bonne chance, bonne nuit et noubliez pas que ce n'est pas le seul code qui existe. Regardez à gauche et à droite ce qui se fait et faites vous-même une synthèse de cela; c'est ce qui permet de progresser!

NB: En ce qui me concerne, le code que j'ai écrit fonctionne... Je viens de l'essayer pour me rassurer!

Commentaire de cyberjosee le 18/02/2005 16:01:20

Ok. J'ai trouvé ce que je cherchais. Voici le code qui s'adapte mieux au serveur de mon hébergeur:



FICHIER DESCRITIF:

Formail +

Script écrit par Loïc Bresler
webmaster@webfr.org
Utilise une partie la classe Mail écrite par Léo West

Ce script met un formulaire sur son site qui permet aux visiteurs d'envoyer un email au webmaster
via un formulaire.
La nouveauté est que ce script permet au visiteur de mettre un fichier joint avec son message.
Le fichier joint est uploadé sur le serveur puis détruit une fois le mail envoyé.

INSTALLATION

Ce script ne fonctionne pas sous Online ou Nexen (et ne fonctionnera d'ailleurs jamais sur ces serveurs. J'ai
tout essayé et j'ai contacté le support technique, ils ont tellement bien modifié leur fonction email()
qu'il est impossible de l'utiliser avec ce script)

Créer un répertoire et uploader les deux fichiers dedans
Dans le fichier formail.php remplacer dans la ligne $dest="..." l'adresse email par la votre

Créer un répertoire "upload" au même niveau que le répertoire que vous avez créé (pas dedans, à côté :-) )

Et voila...

LA FEUILLE EN PHP

<?php
    //======================
    // Author:    TeeJay
    //
    // Date:    09-2002
    //
    // Description:
    // This function takes the input given by
    // the user and processes it.
    // From the moment that the user presses submit
    // a temorary file is stored in a temporary directory
    // specified by upload_tmp_dir on your php.ini,
    // then we get it's size and check to see that is not
    // greater than the MAX_FILE_SIZE specified on the form.
    // If it is all ok up to now, it makes a copy of the temp
    // file to the specified new directory.
    //======================

$new_dir = "uploads/";

if(!is_dir($new_dir)) echo "<font color=red>Please first create the <b>$new_dir</b> folder(s) to store the uploads.</font>";

function handleupload() {
    global $new_dir;
    // Check if it was infact uploaded - by using ['tmp_name']
    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
        echo "<br />";
        // Check it's size
        if($_FILES['userfile']['size'] <= $_POST['MAX_FILE_SIZE']) {
            // get it's real name
            $realname = $_FILES['userfile']['name'];
            // Attempt to copy to users/ <-- Make sure this folder exists already
            if(copy($_FILES['userfile']['tmp_name'], $new_dir.$realname)) {
                echo "<br /><font color=\"green\"><b>$realname</b> was successfuly uploaded</font>";
            }else {        
                //this is probably because the directory does not exist yet
                echo "<br /><font color=\"red\"><b>$realname</b> could not be successfuly uploaded</font>";
            }
                        
        }else {
            // the file to upload exceeds the specified MAX_FILE_SIZE
            echo "<br />The File size exceeded the ".($_POST['MAX_FILE_SIZE']/1024)."kb max file size allowed.<br />";
        }
    } else {
        // File is greater than the upload_max_filesize set on your php.ini
        echo "<br />Possible file upload attack: filename ".$_FILES['userfile']['name'].".";
    }
}

?>
<html>
<head>
<title>File Upload</title>
</head>
<body>
<?php
// When the user clicks on the submit/upload button
// this statement becomes true and the handleupload
// function is called.
if(isset($_POST['submit'])) {
    handleupload();
}
?>
<!-- Make sure to add this: ENCTYPE="multipart/form-data" to your <form> tag for it to work -->
<form ENCTYPE="multipart/form-data" method="POST" action="upload.php">
    File:<INPUT TYPE="FILE" NAME="userfile" SIZE="35">
    <input type="hidden" name="MAX_FILE_SIZE" value="10000000">
    <input type="submit" value="Upload" name="submit">
    <br />Please click only <b>once</b> and wait for confirmation
</form>
<a href="upload.php">clear form</a>
</body>
</html>

LA PAGE EN HTML

<html>
<head>
<title>File Upload</title>
</head>
<body>
<?php
// When the user clicks on the submit/upload button
// this statement becomes true and the handleupload
// function is called.
if(isset($_POST['submit'])) {
    handleupload();
}
?>
<!-- Make sure to add this: ENCTYPE="multipart/form-data" to your <form> tag for it to work -->
<form ENCTYPE="multipart/form-data" method="POST" action="upload.php">
    File:<INPUT TYPE="FILE" NAME="userfile" SIZE="35">
    <input type="hidden" name="MAX_FILE_SIZE" value="10000000">
    <input type="submit" value="Upload" name="submit">
    <br />Please click only <b>once</b> and wait for confirmation
</form>
<a href="upload.php">clear form</a>
</body>
</html>

Ce code donne une deuxième alternative pour différents serveurs. Bonne fin de semaine.
Merci de m'avoir lue.
CyberJosée

Commentaire de cyberjosee le 18/02/2005 16:05:35

Oups! Oubliez le fichier descriptif. C'est celui qui est associé au code qui ne fonctionne pas pour moi. Mais le reste est bon.

Milles excuses.

Cyberjosee

Commentaire de jetjet51 le 06/03/2005 01:22:11

Merci pour le script, tous est nickel
sauf un chti priblème : tous les é sont remplacé par des i

Voici la portion de mon code :

$body ="expediteur :" .$from ."\n";
$body .="Pack Web : " .$packweb."\n";
$body .="Nombre de pages supplémentaires :" .$nombrepages. "\n";


cela donne comme mail :

expediteur :aqz@ffg.dsg
Pack Web : --Choisissez votre pack--
Nombre de pages supplimentaires :0

Que faire ? merci d'avance
PS : cela marchait en utilisant la fonction mail() de php

Commentaire de jetjet51 le 06/03/2005 01:31:47

sorry : autre problème
message d'erreur pour les fichiers > 500Ko

Class Mail, method attach : file ../upload/myfile.exe can't be found

Commentaire de catdj le 28/05/2005 19:06:09

bonjour,
pour vous dire que la méthode fonctionne bien sauf un tit point de détail, mais qui peut avoir son importance: tous les caractères accentués ( é è à ç ....)sont remplacés.

je suis super débutant en php ( en clair je connais rien) et je ne sais comment modifier le code pour entrer les valeurs exactes de ces caractères.

si quelqu'un à une idée, ce serait cool
Merci ;)

Commentaire de krokroline02 le 06/06/2005 16:10:41

bonjour,
j'ai ce message d'erreur qui s'affiche:
Warning: copy(): open_basedir restriction in effect. File(/tmp/phptg99UY) is not within the allowed path(s): (.:/home/sites) in /home/sites/site77/web/formulaire/formmail.php on line 391
Class Mail, method attach : file ../upload/Critères qualité.doc can't be found

j'ai bien créée les répertoires et effectuée le chmod77 sur le repertoire upload.
donc là je suis perdue
merci pour votre aide

Commentaire de garnaud le 17/06/2005 15:16:02

HELP !
voici que que j'obtiens
(Mon hébergeur : Amen.fr)


// code de formail.php
Warning: copy(): open_basedir restriction in effect. File(/tmp/php2RrF9t) is not within the allowed path(s): (.:/home/sites) in /home/sites/site171/web/team/formmail.php on line 385
Class Mail, method attach : file ../uload/gg.txt can't be found

Commentaire de triumphs le 17/06/2005 18:31:38

Salut,

Bon, je vois que ce formulaire n'en fini pas de créer des crasses aux nouveaux venus ainsi qu'à de plus expérimenté... ...

Pour l'instant, je ne peux pas le modifier car je suis relativement occupé. Toutefois, pour les plus patients, je promets de jeter un SÉRIEUX coup d'oeil à ce f.... code qui en fait ..... plus d'un! :-)

@+!

Commentaire de bnj0608 le 18/06/2005 16:12:18

Bonjour, et merci pour ce script.
Il ne fonctionnait pas avec des pdf et autres type mime.
j'ai rajouté un bout de script pour envoyer le bon type mime à la méthode attach.
voici la fin du script :

Rien ne vous empèche de rajouter autant de type mime que vous voulez.
______________________________________________________________________

$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 = $HTTP_POST_FILES['NomFichier']['name'];

    if (is_uploaded_file($NomFichier)) {
      copy($NomFichier, "../upload/$name");
    }
         // type de contenu non defini

if ($name!="") {

// on essaie de reconnaitre l'extension
switch(strrchr(basename($name), ".")) {

case ".gz": $filetype = "application/x-gzip"; break;
case ".tgz": $filetype = "application/x-gzip"; break;
case ".zip": $filetype = "application/zip"; break;
case ".pdf": $filetype = "application/pdf"; break;
case ".png": $filetype = "image/png"; break;
case ".gif": $filetype = "image/gif"; break;
case ".jpg": $filetype = "image/jpeg"; break;
case ".txt": $filetype = "text/plain"; break;
case ".htm": $filetype = "text/html"; break;
case ".html": $filetype = "text/html"; break;
default: $filetype = "application/octet-stream"; break;

}
}

    $m->Attach( "../upload/$name", $filetype );
}

$m->Send();

if ("$NomFichier"!="") {
    Unlink("../upload/$name");
}

Commentaire de defrancesco le 13/08/2005 10:43:00

Bonjour,
J'aimerai apporter ma petite pierre à l'édifice.
J'ai installé le script de Loïc Bresler, l'année dernière et il fonctionne parfaitement.

Par contre, j'essaie désespérément de rendre un champ obligatoire, mais je n'ai pas trouvé la solution.

Si je mets: pour le champ "Nom" obligatoire,

if ($Nom == 0)
{
echo("Mettre un nom");
die ();
}

Le script s'arrête bien mais je n'arrive pas à retourner dans le formulaire.

Quelqu'un a-t-il une solution.
Merci d'avance.
Christian

Commentaire de fanman le 18/08/2005 15:37:22

Salut, alors moi il marche très bien à part comme CATDJ j'ai tous les é ç ' qui sont remplacé par des i ou des \ pour l'apostrophe.
Auriez vous une idée ?

Commentaire de defrancesco le 18/08/2005 15:52:17

Oui, il suffit de remplacer:
charset=us-ascii par charset=iso-8859-1
dans : function_build_attachement()

Commentaire de triumphs le 29/08/2005 17:22:53

Pour répondre à defrancesco:

Dans ton cas, j'opterais pour JavaScript; en effet, étant effectué sur la page ou se trouve le formulaire, le même type de test permet le contrôle du formulaire sans quitter la page courrante... C'est l'avantage de l'exécution côté client!
Ensuite, lorsque le test est réussi, tu peux faire l'appel au code PHP.

Tu peux trouver de très JavaScript sur le net ou développer ton propre code (ce que je te conseille!), car généralement, les vérifications de formulaires sont des codes qui doivent souvent être mis à jour et on sais bien que c'est plus facile de relire son propre code.

J'espère que j'ai pu t'aider... Bon code!

Commentaire de catdj le 29/08/2005 18:34:46

merci DEFRANCESCO pour ton aide, ça fonctionne nickel et pourtant je me suis pris le tête un bon moment sans trouver.
Bon code à tous ;-)

Commentaire de fanman le 29/08/2005 23:21:06

Merci DEFRANCESCO, trop top, pareil j'me suis trop casser la tête est c'était si simple...... Encore Merci

Commentaire de snake0000 le 02/09/2005 16:13:37

bonjour,

Le script fonctionne à merveille cependant je souhaiterais pouvoir envoyer 2 pieces jointes que je nomme dans le formulaire NomFichier2
J'ai alors rajouté dans formmail.php les quyelques lignes suivantes sans aucun résultats : il continue à n'envoyer qu'une seule piece jointe :
if ("$NomFichier_name"!="" ) {
copy("$NomFichier","../upload/$NomFichier_name");
copy("$NomFichier2","../upload/$NomFichier2_name");
$m->Attach( "../upload/$NomFichier_name", "application/octet-stream" );
$m->Attach( "../upload/$NomFichier2_name", "application/octet-stream" );
}
        $m->Send();
if ("$NomFichier_name"!="" ) {
Unlink("../upload/$NomFichier_name");
Unlink("../upload/$NomFichier2_name");  }    
echo "$reponse";

Si quelqu'un avait une idéé?
Merci d'avance

Commentaire de triumphs le 02/09/2005 18:00:13

Pour répondre à snake0000:

Normalement, la fonction 'Attach' de l'objet est censée pouvoir attacher plusieurs fichiers.
Toutefois, le code que tu donnes en exemple me semble erroné:
[Voilà ce que j'aurais mis]
//Attachement du premier fichier; s'il existe...
if ("$NomFichier"!="") {
  $name = $HTTP_POST_FILES['NomFichier']['name'];
  if (is_uploaded_file($NomFichier)){
    copy($NomFichier, "../PHPMail_TempUpload/$name");
  }
  $m->Attach( "../PHPMail_TempUpload/$name", "application/octet-stream" );
}
// Attachement du deuxième fichier; ... ...
if ("$NomFichier2"!="") {
  $name = $HTTP_POST_FILES['NomFichier2']['name'];
  if (is_uploaded_file($NomFichier2)){
    copy($NomFichier2, "../PHPMail_TempUpload/$name");
  }
  $m->Attach( "../PHPMail_TempUpload/$name", "application/octet-stream" );

}

$m->Send(); /* Envoi du mail */

if ("$NomFichier"!=""){
  $name = $HTTP_POST_FILES['NomFichier']['name'];
  Unlink("../PHPMail_TempUpload/$name");
}
if ("$NomFichier2"!=""){
  $name = $HTTP_POST_FILES['NomFichier2']['name'];
  Unlink("../PHPMail_TempUpload/$name");
}

echo "$reponse"; /* Affichage du message d'envoi réussi */
}
...

Ce bout de code me semble plus juste; je ne l'ai toutefois pas testé.
En voyant ce que je viens d'écrire, je me dis que l'on peut facilement dynamiser tout cela et, donc, pouvoir envoyer un nombre arbitraire de fichiers joints... ...

J'espère que ça pourra t'aider; bon code!

Commentaire de ghostleretour le 07/09/2005 23:48:14

Class Mail, method attach : file ../upload/test.jpeg can't be found

Meme probleme pour moi, mais uniquement pour les pieces jointes de plus de 100ko, d'ou peut provenir le probleme pour vous ???

Stéphane

Commentaire de triumphs le 08/09/2005 00:13:42

Pour répondre à ghostleretour:

C'est un problème récurent... ... Malheureusement, le code fonctionne parfaitement dans mon cas.
Tu devrais essayer de reprendre la partie du code qui fait l'upload du fichier et faire ainsi un formulaire qui ne fait qu'uploader un fichier. Ensuite, essaye de voir si le fichier uploadé apparaît sur le serveur (dans son intégrité!). Si tel est le cas, cela signifie que l'upload s'est bien passé, mais que, dans le code pour l'envoi d'e-mail, une erreur ne permet pas de retrouver le fichier sur le serveur.

Si ton problème persiste, il peut être dû à un porblème lors du transfère; en ce sens que le transfère n'a pas pu s'effectuer correctement (temps d'attentetrop long par rapport au temps d'exécution!), etc.

Le mieux serait que tu trouves un autre code qui effectu l'upload correctement et que tu... ... en fasses profiter tout le monde!!!

Bonne chance, bon code et tiens-nous au courrant!

Commentaire de ghostleretour le 08/09/2005 13:38:15

Merci triumphs... J'ai changé pleins de trucs, malheureusement tous en lmeme temps, le fichier ne fait plus que 7ko au lieu de 11ko.

Je suis donc décu pour vous car je ne sais pas dire qu'est ce qui permet de faire fonctionner le chmilblic !

En tout cas maintenant ca fonctionne jusqu'a 1MO, ce qui est deja beaucoup mieux, meme largement suffisant. En ce qui concerne le message d'erreur :
Class Mail, method attach : file ../upload/test.jpeg can't be found
Qui était fort dérangeant, je l'ai modifié (ligne 379 pour vous) par La pièce jointe ne peutr dépasser 1000ko, veuillez cliquer sur "page précédente" pour en choisir une autre...

Ne pas oublier de \ devant les " si vous faites pareil !

Ca me semble trop con, mais j'ai aussi ajouté un 0 pour le :
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">

Mais ca me semble trop simple, etmaintenant que ca marche je touche plus a rien lollll

Merci pour votre soutient, j'espère que le mien vous donnera un petit coup de pouce !

Stéphane

Commentaire de triumphs le 08/09/2005 21:29:53

Pour répondre à ghostleretour:

Merci d'avoir cherché. Comme tu le dis, cela est trop con... ... Mais je crois que c'est bien la bonne méthode pour augmenter la taille limite du fichier uploadé. (Il me semble avoir lu cela quelque part, mais je ne me rappelle plus où; désolé!)

J'ai donc entrepris une petite recherche... ... Voici ce que j'ai pu trouver dans un forum (http://aspn.activestate.com/ASPN/Mail/Message/phpdoc/2012253):

------------------------------------------------------------------------

[2002-11-22 08:38:47] Xuefer at 21cn dot com

[quote from php manual
mian> >feature>>handling file uploads]

The MAX_FILE_SIZE hidden field must precede the file input field and
its value is the maximum filesize accepted. The value is in bytes.

[warnning]
warning: The MAX_FILE_SIZE is advisory to the browser. It is easy to
circumvent this maximum. So don't count on it that the browser obeys
you wish! The PHP-settings for maximum-size, however, cannot be fooled.

[/warnning]
[/quote]
it doesn't tell how php check the size
1 year ago I 1st time read it, and re-read it today, finally get what
it means

document should tell more to programmers:
----------
1. user's file size is checked at the beginning of transfer before
upload is done
2. hard limit: file size is check against "PHP-settings for
maximum-size", file which larger will be refused
3. then, soft limit: check against "MAX_FILE_SIZE" if there is one
hidden value before input file field
4. when transfer done, php-script is active, manage to store the
uploaded-file, however, value of MAX_FILE_SIZE easy to circumvent, and
cannot be trust on, your php-script should re-check the uploaded file
size as u wish.
FAQ: u said MAX_FILE_SIZE is untrustable, why we should make use of it?
why not use only php-script to check filesize?
answer: in current php, handling of upload file, scirpt is not active,
thus, cannot check filesize until transfer of upload file is done.
MAX_FILE_SIZE get ability to soft limit the filesize before user have
to wait too long.
----------

this is what i comprehend :)
yes, it's too long, hope u guys can refine it, and put into new version
of phpmanual

------------------------------------------------------------------------


Je pense que je n'ai pas besoin de donner d'explication supplémentaire...

Voilà. Bon code!

Commentaire de ghostleretour le 08/09/2005 23:31:09

J'ai pas pensé a ca car je croyais que le probleme venait du PHP...
Mais bon, je connaissait l'existance de cette balise et j'ai donc vérifié.

A parement donc, comme le fichier est trop gros par rapport a ce que le formulaire accepte, il n'est pas uploader sur le serveur et donc le PHP nous dit que le fichier n'existe pas (logique, il n'a pas été chargé car le formulaire le rejetait) !

L'énigme est résolue, tout me monde peut donc l'utiliser maintenant lolll

Stéphane

Commentaire de triumphs le 12/09/2005 20:44:02

Voilà! Comme je l'avais annoncé le 17.06, je me suis penché sur c'te formulaire et j'ai essayé de corriger ce qui devait l'être et d'ajouter des fonctionnalités intéressantes.

-- Désolé LiTtleBuBu, je fais un peu de la pub pour moi... --

Voici l'adresse de la mise à jour de ce code:
http://www.phpcs.com/code.aspx?ID=33766

Commentaire de fanman le 20/09/2005 09:51:52

Salut,
J'ai encore un petite question.

Quelqu'un aurait-il réussi à faire fonctionner ce script sur FREE. Car malheureusement j'peux pas changé le chmod sous free.
Paralèlement à ça j'ai un forum phpbb avec un mod attache-mod ou j'upload des fichier dans un répertoire et ça marche, malgré le chmod. Y aurait'il une solution pour faire fonctionner ce script sous free, ou c'est moi qui ai m**dé... ?

Sinon ce script trop génial, encore bravo.

Commentaire de defrancesco le 20/09/2005 10:52:37

Fais un tour sur cette page:

http://www.webfr.org/index.html?page=formailfree

Commentaire de lnicos le 03/10/2005 18:07:25

bonjour,
ce code fonctionne très bien chez moi. Hormis le fait qu'aucune pièce jointe n'est réellement envoyé, je n'arrive pas à la lire  à partir de mon webmail courant, alors qu'il affiche bien une pièce jointe...
Est-ce quelqu'un a une idée ??

Merci

Commentaire de ghostleretour le 03/10/2005 18:25:20

Est ce que ton dossier est bien en CHMOD 777 ?
As tu bien modifié la taille du hidden maxfilesize dans le fichier HTML ?

Stéphane

Commentaire de lnicos le 03/10/2005 19:22:38

je dois mettre quoi...
pour mon dossier, je suis sous windows avec easyphp, donc je ne peux rien modifier, c'est gênant ???

comment faire ?
merci encore

Commentaire de ghostleretour le 03/10/2005 21:51:30

Tu dois te connecter sur ton propre PC grace a l'adresse ip 127.0.0.0 (login Localhost et mdp pareil que ta base de donnée) avec un logiciel comme FTPExpert ! Je suis pas sur que ca fonctionne mais ca vaut la peine de tester ;-)

Stéphane

Commentaire de aminix9 le 23/12/2005 11:40:02

salu les programmeurs,
est c que quelqu un peu m aider à utiliser ce  code sous windows xp avec wamp5!!
je veu le tester en local, j ai crée un répertoire au sein du repertoire de mon site(qui est en localhost) et j ai aussi crée le dossier upload, mé quand je clik envoyer le navigateur m affiche le code du fichier formmail.php!!
je sé pa si j ai fé une grande betise!!
merci.

Commentaire de dual design le 30/01/2006 15:05:05

Bonjour,

J'ai suivi scrupuleusement vos conseils d'installation et je n'arrive pas à comprendre ce qui se passe, j'obtiens l'erreur suivante :

Fatal error: Cannot redeclare send() in /home/ju41718/mail/classMail.php on line 268

Pour information, j'ai créé un répertoire "mail" dans lequel j'ai stocké les deux fichiers PHP. Le répertoire est en CHMOD777.
La page sur laquelle se trouve mon formulaire a la balise <FORM> suivante :

<form name="mail" id="form" vname="FormName" action="mail/PHPFormMail.php" method="post" enctype="multipart/form-data" onSubmit="return controle2();">

Je ne sais pas ce qui peut empêcher le bon déroulement de l'opération, merci de m'aiguiller :)

Commentaire de reza999 le 30/03/2006 16:08:00

Bonjour, je pige pas le coup du repertoire upload.. pouvez vous apporter des percisions la dessus.. c'est quoi un repertoire, un dossier? vide? sinon ya quoi dedans? je capet un beignet mais ça va venir!!

merci d'aider le padawan du php que je suis ou d'orienter vers un tuto debtant bien fait , pour formulaire avec piece jointe,

thx ++

seb

Commentaire de bebesuelenet le 03/04/2006 21:58:02

allu,
comment peut on faire pour ajouter une réponse à l'expediteur du formulaire c'est a dire à $email ?
merci a tous en tout cas le script marche super bien avec upload à 2Mo :
<input type="hidden" name="MAX_FILE_SIZE" value="20000000">

bebesurlenet

Commentaire de wildover le 15/05/2006 16:19:25

Salut ! j'ai la flemme de lire tout ça alors est ce que quelqu'un pourrait m'expliquer un peu. je suis chez ovh et je n'arrive pas à faire marcher ce script. j'ai fait toutes les manips et quand je clique sur envoyer j'obtiens un message erreur 404 formmail.php introuvable pourtant le fichier est bien à l'emplacement indiqué et les dossiers sont sur 777. je ne compends pas.

Commentaire de wildover le 15/05/2006 17:56:22

voila le message que j'ai
Not Found
The requested URL /01/formMail.htm was not found on this server.

Apache/1.3.34 Server at wildover.com Port 80

Commentaire de sami038 le 25/07/2006 17:51:25

Super avec free , sa marche , seuile problème pas de pièce jointe !

Commentaire de tetsuoooo le 08/09/2006 20:28:55

Voila je suis chez free
lorsque je remplis le formulaire sans piece jointe ca fonctionna avec une image ca donne

*****************************************************
Warning: copy() [function.copy]: open_basedir restriction in effect. File(../upload/DSCN0611.jpg) is not within the allowed path(s): (/mnt/128/free.fr/d/e/blueflugi) in /mnt/128/free.fr/d/e/blueflugi/formmail.php on line 387

Warning: copy(../upload/DSCN0611.jpg) [function.copy]: failed to open stream: Operation not permitted in /mnt/128/free.fr/d/e/blueflugi/formmail.php on line 387

Warning: file_exists() [function.file-exists]: Unable to access ../upload/DSCN0611.jpg in /mnt/128/free.fr/d/e/blueflugi/formmail.php on line 345
Class Mail, method attach : file ../upload/DSCN0611.jpg can't be found

******************************************

J'ai filezila et malgré que je change l'attribut en 777, lorsque je regarde les attributs ils restent en 700

merci de votre aide

Commentaire de pepito007 le 27/09/2006 12:11:48


Bon les gars... ca m'a l'air d'un bordel cette histoire... mais enfin, je ne vais pas etre mauvaise langue, j'ai fini par reussir à faire fonctionner le script d'envoi de mail avec upload de piece jointe, le tout sous serveur Amen... MAIS mais... et c'est là que je casse l'échafaudage... la piece jointe arrive directement dans le corps du message ! (des lignes et des lignes de code s'affichent dans le corps... pour un fichier .jpg par exemple)...

j'ai regardé un peu partout, mais personne ne parle de ca...
à bon entendeur

en tout cas, que d'energie developpée pour ce développement... !
à +++ et merci

Commentaire de ricob le 02/11/2006 10:37:34

Bonjour tout le monde ce script fonctionne tres bien mais malgré avoir lu vos commentaires je n'arrive pas a modifier le code pour avoir 4 pièces jointes . Quelqu'un pourrait il m'aider svp ? Je patauge et je suis ultra debutant .

Merci a l'auteur et a ceux qui m'ont permis de le faire fonctionner

Commentaire de ricob le 03/11/2006 01:31:04

j'ai planché sur le probleme et grace aux commentaires de vous tous ca marche .
J'ai juste un soucis le nom de l'emetteur qui s'affiche dans ma messagerie est celui de mon compte free.(si quelqu'un a une solution ...)

Merci a tous

PS il serait utile de rajouter une fonction de verification des champs et enventuelement l'envoi de l'adresse IP de l'internaute.

Commentaire de DadouM59 le 04/02/2007 16:25:49

j'ai un peu probleme je suis novice en matiere de creation de site internet, pour les besoin de mon association j'essai de creer un formulaire avec plusieur entrée Nom, Prenom, Adresse  ...etc mais je n'arrive pas à configurer le fichieer PHP voila ce que j'ai ecrit en reprenant les in dices ci dessus:

} // class Mail

$subject=StripSlashes($subject);
$msg=StripSlashes($msg);
$msg="Message depuis votre site web:
$msg &lt;br&gt;
Nom: $nom";
$m= new Mail; // create the mail
        
mais le mail arrive avec un corp vide Message de votre site web. rien en dessous quelqu'un a t il une explication
Merci

Commentaire de kisa03 le 21/02/2007 08:44:15

bonjour A tous !

Bon j ai juste un petit probleme , le code du tuto a l air de fonctionner , mais quand je clique sur le bouton envoie cela m ouvre la page "Merci pour votre message" que jai bien entendu cree , mais je ne recois aucun mail , ni piece jointe ......j ai fais plusieur essaie sur different boite , rien .... probleme de code ou hebergeur ??

ensuite a la place de mon message

$reponse=StripSlashes("merci pour votre message")

je voudrais inseret un lien de retour sur mon index.html   comment puis-je faire

Merci d avance pour votre aide

KISA

Commentaire de antonio66 le 22/02/2007 22:17:31

Bonjour,

Deja merci pour ce script qui est exactement ce qu'il me faut et qui fonctionne impecable. Malheureusement je souhaite integrer un deuxieme champs pour envoyer 2 pieces jointes. J'ai essayé le code indiqué plus haut, mais ça ne fonctionne pas.

Qulesqu'un pourrait m'aider ?

Merci par avance.

Commentaire de roberto2309 le 20/03/2007 18:28:41

Salut les gars, Merci pour ce beau code.
Je suis désolé de faire chier, mais j'ai un soucis, je recois bien le mail, il semble contenir mes pj (le poids du message correspond) mais je n'arrive pas a ouvrir mes pj, elles n'apparaissent pas...

Aidez moi, sinon je vais faire du mal a quelqu'un de mon entourage, il faut bien que quelqu'un paie...

Commentaire de super_yann le 15/07/2007 20:26:12

Roberto2309 ( ta surement bloqué l'acces au PJ .. Outlook fait ca par défaut.. mais tu peux le setter dans hotmail)

---------
Je voulais dire merci a : LiTtLeBuBu et triumphs

Moi toute a marché tout de suite.. Aucune erreur. J'ai ajouté 4 champs supplémentaire (nom, prénom, #tel, age) et j'ai 2 pieces jointes..Tout marche parfaitement :)

Donc merci :)

--------

Je vais mettre les fichiers toute modifier sur mon site perso. Moi, le formulaire sert pour que les gens envoie leur candidature pour un emploi.
-Donc, vous aurez a modifier la page Merci.php
-Les paramètre du script dans : PHPFormmail.php (nom, email, etc.)
-L'action du post dans : phpform.php et le texte que j'ai ajouté plus haut pour mon usage perso :)
- Et faire ce que l'installation demande.. faire le dossier "upload" a coté du dossier qui contient (merci.php, PHPFormmail.php et phpform.php) et lui faire un CHMOD 777.

(si votre dossier ne s'appel pas "upload", ca marchera pas.. sauf si vous changer le nom dans du lien dans PHPFormmail.php.)

Pour l'avoir : http://www.super-yann.com/emploi.zip  

Commentaire de doc421 le 19/09/2007 01:56:41

Chers amis, bravo et merci!
Mais comment rajouter des champs tels: nom, tel...
Merci

Commentaire de Lodurr le 17/10/2007 12:22:08 6/10

Bonjour
pas  de problèmes avec le texte mais beaucoup avec piece jointe (Photo) hébergeur Free

j'ai ceci : Warning: copy(../upload/classic.jpg) [function.copy]: failed to open stream: No such file or directory in /mnt/152/sdc/0/6/glangl1/Courrier/formmail.php on line 387
Class Mail, method attach : file ../upload/classic.jpg can't be found
merci pour votre aide
cordialement
Gérard
http://glangl1.free.fr

Commentaire de simon59150 le 19/11/2007 13:51:42

super code

il fonction bien

Commentaire de Lodurr le 19/11/2007 17:05:17

résolut
simplement oublié le dossier upload

Commentaire de alainleo le 22/11/2007 13:49:03

Bonjour à tous,

Ce code est exactement ce qu'il me faut mais je n'arrive pas à le faire fonctionner chez moi.

Ma config : Windows XP, serveur Apache en local, navigateur firefox et thunderbird pour le courrier.

Mon problème avec le code est que je reçois un mail, avec le trombone m'indiquant qu'il y a un fichier attaché, mais ce mail est totalement vide (ni texte, ni fichier joint).

Je ne comprends rien au "chmod 777" qu'il faudrait peut-être faire sur le répertoire "upload", répertoire qui fonctionne d'ailleurs bien en principe car j'arrive à y uploader sans problème des fichiers avec un autre script.

Je viens de m'offrir un gros bouquin sur le PHP5 mais je n'en suis encore qu'à la préface ... :), et avant que je comprenne...

Si quelqu'un peut m'aider, merci d'avance.

Commentaire de defrancesco le 23/11/2007 07:04:24

Tu ne trouveras rien sur le CHMOD dans ton bouquin sur PHP.

Fais plutôt un saut sur le site du Zéro:

http://www.siteduzero.com/tuto-3-172-1-lire-et-ecrire-dans-un-fichier.html#ss_part_1

Bonne lecture

Commentaire de alainleo le 23/11/2007 10:45:45

Merci pour ton aide Defrancesco.

J'ai visité le site du Zéro et le cours est effectivement très clair et intéressant.

Je pense donc que mon problème ne vient pas du chmod puisque mon serveur n'est pas sous linux, mais sous windows.

Simplement, les mails que je reçois avec le script du formulaire Littlebubu sont vides de tout texte comme de tout fichier joint. En quelque sorte, je reçois des enveloppes vides.

Bon, je vais quand même relire plus attentivement le cours sur le chmod... on ne sait jamais.

Commentaire de defrancesco le 23/11/2007 12:59:21

Le CHMOD n'a rien à voir avec le navigateur!
C'est le droit d'accès chez le provider que l'on peut modofier avec FTP.
Quand ont transfert des dossiers et des fichiers sur le serveur via FTP on peut modifier les droits d'accès.
En général, il suffit  d'aller sur le dossier (ou le fichier) désiré avec le pointeur de la souris et de faire un clique droit. Apparaît un menu avec la fonction CHMOD.
Il suffit alors de modifier le droit d'accès.

Commentaire de alainleo le 23/11/2007 17:52:43

Merci Defrancesco,

je viens de modifier le chmod de mon répertoire upload mais j'ai eu du mal à comprendre comment me connecter à localhost avec filezilla pour faire cette opération.

Alors j'ai bien mis le chmod à 777 mais l'envoi du formulaire ne fonctionne toujours pas. Pour l'instant, j'ai le message d'erreur : "Class Mail, method Mail : Adresse invalide".

Faut dire que j'ai pas mal bidouillé le code et je ne sais plus où j'en suis. Je vais effacer tout cela et recommencer. :)

Commentaire de alainleo le 23/11/2007 18:39:48

Encore moi !

Le chmod est modifié mais mes mails arrivent toujours vides.

Pas d'indication de l'expéditeur, ni du sujet (alors que je les ai bien entrés dans le formulaire) et pas de pièce jointe ni de texte dans le message.

Comment faire ?

Commentaire de simon59150 le 23/11/2007 18:41:33

ton hébergeur accepte t-il le php

Commentaire de defrancesco le 23/11/2007 19:06:56

Il faut savoir que certains hébergeurs (les plus actifs dans la mise à jour),  par mesure de sécurité, appliquent un patch sur PHP qui bloque les tentatives d'injections de headers via la fonction mail() sur tous les formulaires PHP en ligne.
En effet, de nombreux sites contiennent des formulaires qui ne respectent pas les standards et normes d'échange/protocole mail et qui ne vérifient pas comme il faut les paramètres qu'ils envoient en "additional parameters" à la fonction mail, ce qui permet d'injecter des headers et donc d'envoyer du spam massivement depuis les serveurs.

Personnellement, je pense que ce script est dépassé.
Je te conseille d'aller en télécharger un plus récent.

Ex: http://www.patrickhamy.net/

Qui à l'avantage de posséder son propre forum.

Bonne chance !

Commentaire de alainleo le 23/11/2007 22:37:10

Merci de vos conseils.

Oui, mon hébergeur (le Neuf) semble accepter le php puisque j'arrive avec un expéditeur simple de formulaire (voir le script ci-dessous) à recevoir des mails sans problème.

Seulement, je voudrais y ajouter ce qu'il faut pour recevoir deux pièces jointes, en relation avec deux champs de type file de mon formulaire html... et ça, je n'y arrive pas.

Les pièces jointes ne sont jamais jointes... (c'est pourquoi je me suis intéressé au formulaire de littlebubu, mais, chez moi en tout cas, il fonctionne encore moins bien que mon script rudimentaire puisque je ne reçois cette fois ni la pièce jointe, ni le texte).

Si vous savez comment ajouter ce qu'il faut à mon script, je suis preneur.

Merci d'avance.

Voici le script :

<?php
$monadresse = "monadresse@waika9.com";
$objet = "Formulaire contact";
$message = "Formulaire Contact : \n";

foreach ($_POST as $name => $value) {
   $message .= htmlspecialchars(stripslashes("$name: $value  |  "));
   }
if (isset ($_POST['mail']) && ($_POST['mail']!= "") && (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$_POST["mail"])) && ($_POST['civilite']!= "") && ($_POST['nom']!= "") && ($_POST['prenom']!= "") && ($_POST['ville']!= "") &&( $_POST['message'] != ""))
{


$poster = 'From:'.$_POST['mail']."\r\n";
$poster.= 'Mime-Version: 1.0'."\r\n";
$poster.= 'Content-Type: text/plain; charset=iso-8859-1'."\r\n";
$poster.= 'X-Mailer: PHP/' . phpversion();
$poster.= "\r\n";
        
  if (@mail($monadresse, $objet, $message, $poster)) {

    echo "<b>Merci de votre visite sur le site !</b>\n";
    echo "<p>Votre message a bien été transmis !</p>\n";
  } else {
    echo "<b>Désolé, votre message n'a pu être transmis.</b>\n";
  }
} else {
  echo "<body><div
style=\"text-align: center; margin-top: 20%; font-weight: bold; color: red;\"><big>Merci de bien vouloir <br /><br /><br /> Renseigner tous les champs signalés par un astérisque (*).<br /> <br /><br />et vous assurer d'avoir fourni une adresse E-mail valide.</big>

</span></div></body>\n";
}

echo "<a href='accueil.html'>Accueil</a>";
?>


Commentaire de AzertiX le 04/01/2008 17:38:27

Pour tous ceux qui sont chez Free, sachez que donner tous les droits sur un dossier (le chmod 777) n'est pas autorisé par  le serveur. D'où les problèmes avec la pièce jointe.
Pour ma part, j'ai réussi à contourner le problème en créant le dossier upload sur mon bureau (donc avec tous les droits) puis en l'uploadant sur mon ftp. Quand on regarde les attributs de ce dossier fraichement uploadé, on voit qu'il a a présent tous les droits (777).

En espérant que ça résoudra des problèmes ...

Commentaire de thekidfry le 12/04/2008 14:24:06

mpi ça me mais
Message depuis votre site web:
et la rien alors que j'ai tester et envoyer un message !

Commentaire de amilo le 18/05/2008 15:29:34 9/10

Bonjour,
Pour répondre à AZERIX, je suis moi-même chez FREE (tout le monde put se tromper :-)...) mais je n'ai pas de problème avec les pièces jointes.
Voir test : http://chroniq.free.fr/mail/form.html
Il est vrai que je ne suis pas habitué au PHP, c'est dire que je n'ai rien chamboulé dans la source originelle.
Bonne journée.

Commentaire de Lodurr le 18/05/2008 16:11:35

bonsoir
Pas la peine de faire une fixation avec <FREE
tout le bazar fonctionne correctement avec, pièce jointe comprise, quand on prend la peine de bien appliquer la procédure à la virgule prêt
ce script est tout simplement génial et rempli à la perfection son rôle
bon courage
  

Commentaire de amilo le 18/05/2008 17:28:16

Ai-je dis le contraire ?! Au contraire...

1, 5 ou X pièces jointes sans problème.
0.5, 1 ou 5 Mo sans problème (sauf vitesse, bien sur).
Avec ou sans commentaire.

Merci à l'auteur.

Commentaire de Kicherch le 21/01/2009 22:39:18

Bonjour, Voilà plusieurs mois que j'utilisais ce script sans problèmes. Depuis qq jours le système envoie toujours la Piece jointe dans le répertoire upload mais la PJ ne suit plus le mail. Quelqu'un a t il une solution?
Merci d'avance.

Commentaire de triumphs le 22/01/2009 00:16:02

Salut Kicherch,
S'il apparait un changement dans le comportement du script et que tu n'as visiblement pas fait de modification, c'est que cela vient probablement de ton hébergeur.

Dans un premier temps, tu devrais vérifier s'il n'y a pas une mise à jour de la version de PHP (voir même un changement dans la politique de sécurité de certaines fonctions du PHP telle que 'mail') ou de la gestion de fichiers qui aurait été faite par l'hébergeur.

Personnellement, je pencherais pour la première solution et plus précisément pour un changement de politique de sécurité de la fonction mail. Il faut tout de même se rappeler que l'utilisation automatiques (et peu contrôlée) de ce type de fonction s'apparente à une faille de sécurité pour les hébergeurs... ...

Bonne chance, bon code!

Commentaire de Lodurr le 22/01/2009 09:34:51

bonjour Kicherch
peut tu nous dire quel est ton hébergeur ?

Commentaire de Kicherch le 22/01/2009 14:42:26

Je vous remercie de l'interet que vous portez à ma question.

- Mon hébergeur est OVH, mon fournisseur d'acces est Orange.
- Ma messagerie passe par orange en courrier sortant.
En rappel de mon problème : Le script effectue correctement le transfert de la pièce jointe dans mon répertoire "upload", et effectue aussi la suppression du fichier(cde unlink)après envoi du mail.
La question qui se pose(pour moi) reste le transfert de la pièce jointe qui ne se fait plus avec le texte du mail.

Mes dernières tentatives de modification du fichier FORMAIL.PHP en restent sur les lignes ci-dessous :


} // 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 = $_FILES['NomFichier']['name'];
  if (is_uploaded_file($NomFichier)){
copy($NomFichier,"upload/".$name."");
  }
  $m->Attach( "upload/".$name."", "application/octet-stream" );
}
        $m->Send();
#if ("$NomFichier_name"!="") {
#Unlink("upload/$NomFichier_name");   }    
echo "$reponse";

?>

je vous remercie de votre aide.






Commentaire de macduf le 21/02/2009 21:55:30

Bonjour, j'ai suivis les instruction, lorsque j'envoie un fichier joint, mon dossier upload reste vide, par contre je reçoit bien l'email.
Mon dossier upload à les permissions nécessaires (777).
D'où viens le problème?
J'ai essayé d'envoyer des images, dossier zip, mais toujours rien...

Commentaire de kina17 le 15/06/2009 23:59:01

Bonjour à tous,
Message idem Macduf 21/02/09
J'ai suivi les indications pour me servir de ce code.
-  J'ai à la racine de mon site un répertoire FR avec dedans les fichiers form.html et formmail.php
- j'ai créer à la racine du site un répertoire upload qui est bien en chmod 777
et rien à faire. Lors des essais, je reçois bien le mail, mais pas de pièce jointe.
- je travaille sous Dreamweaver
- le site est hébergé chez Amen
- j'ouvre le courrier avec Microsoft entourage sous Mac ou directement via le webmail du site.
HELP HELP avant que je m'arrache tous les cheveux. Merci

Commentaire de veri10 le 20/07/2009 17:22:05

Bonjour,

Mêmes problèmes que beaucoup de monde ici :

-Pas de pièce jointe malgré le 777.
-Rien dans "de" du mail (censé recevoir le mail de l'expéditeur)
-Rien dans "objet" du mail (censé recevoir le sujet saisi par l'expéditeur)
-Le corps du mail ne reçoit que le texte écrit en dur dans le script, ne reçoit pas ce qu'a écrit l'expéditeur dans "message"
-Priorité : n'apparaît nul part.

Bref, marche pas !

Commentaire de ma11 le 17/09/2009 10:09:16

Merci. Seul inconvénient, l'envoi de piece jointe ne fonctionne pas voici ce que je recois :  

Warning: copy(../upload/htm.JPG) [function.copy]: failed to open stream: Permission denied in /home/ma111com/public_html/form/formmail.php on line 388
Class Mail, method attach : file ../upload/htm.JPG can't be found

Merci si vous pouvez m'indiquer comment proceder.

Très amicalement Michel Azéma
http://www.ma11.com
l'adresse de mon site.

Commentaire de cfndiaye le 25/09/2009 00:29:34

salut tout le monde
comme vous j'ai eu des problémes en testant ce code
j'ai effectué quelque touche maintenant ça marche nikel
si vous le voulez envoyer moi un mail a xoolicreative@gmail.com

Commentaire de sebarca le 27/01/2010 18:13:53

Bonjour, étant un vrai nul en PHP j'ai pris ce code et il marche à merveille, j'en remercie l'auteur, cependant une petite question me vient, j'aimerais que le message envoyé a l'envoi du formulaire, ne s'affiche pas sur la meme page mais plutôt dans une autre page. J'espere me faire comprendre...

D'avance merci...

Commentaire de rachoup le 02/04/2010 16:43:57 9/10

bonjour little _bubu je tiens à te dire merci qui marche impeccablement bien....!!!!!! ça fait des semaines que je tourne de forums en forums pour tester un bon script mais là je suis super contente. j'ai bien suivi tes recommandations via le fichier lisez moi.
Merciiiiiiiiiiiiiiii pr les débutants comme moi .....et chapeau!

Commentaire de rachoup le 03/04/2010 02:13:18

le code de little-bubu a quelques limites quand on veut adapter form ou changer nom fichier form.html du coup j'ai du me pencher sur la précision de triumph et ça marche donc:
//rectification c'est vrai que le script de triumph est beaucoup mieux mais pour ceux avec //qui l'un ou l'autre cas voient apparaître un msg d'erreur remplacer les lignes:

$m-&gt;Attach( "../upload/$name", "application/octet-stream" );
}

$m-&gt;Send();
//par le code ci-dessous

$m->( "../upload/$name", "application/octet-stream" );
$m->Send();

hébergement ovh sous windows sinon il y'a toujours erreur du genre unexpected &....on line ...
//n'oubliez pas la ligne:cf->commentaire triumph du 18 mai 2005 et Augmentez le maxFileSize
if ("$NomFichier"!="") {
    Unlink("../upload/$name");
}

Bonne chance. "l'union fait la force" les deux codes m'ont pour ainsi dire aidée.

Commentaire de cfndiaye le 03/04/2010 13:31:33

allez voir du coté de http://www.phpcs.com/code.aspx?ID=50607
j'ai effectué quelque correctif et ça marche nikel.

Commentaire de yaniks9 le 04/11/2010 15:41:43

Bonjour,

Après avoir suivi la procédure d'installation des scripts, le message d'erreur suivant est affiché:

Objet non trouvé!
L'URL requise n'a pu etre trouvée sur ce serveur. La référence sur la page citée semble être erronée ou perimée. Nous vous prions d'informer l'auteur de cette page de cette erreur.

Si vous pensez qu'il s'agit d'une erreur du serveur, veuillez contacter le gestionnaire du site.

Error 404
127.0.0.1
11/04/10 18:33:26
Apache/2.2.15 (Win32) PHP/5.3.2

Que faire? tout en sachan que nous des novices en la matière

Merci pour votre précieuse aide

Commentaire de MeDoan le 25/05/2011 16:20:01

Bonjour!

Tout d'abord, merci pour ce partage qui fonctionne pas trop mal!

Pourquoi "pas trop mal"? ^^

Eh bien j'ai un souci avec la verification du mail... je peu mettre n'importe quoi, meme laisser le champs vide, je n'ai pas de message d'erreur, le mail part quand meme :/

et je ne comprend pas pourquoi :/

merci

Commentaire de cfndiaye le 26/05/2011 08:30:27

allez voir du coté de http://www.phpcs.com/code.aspx?ID=50607

Commentaire de MeDoan le 26/05/2011 09:34:49

Salut CFNDIAVE,

Merci pour ta réponse aussi rapide! Je n'avais pas vu ce post "corrigé" du formulaire..
mais j'ai toujours le même problème :/

Je reçois correctement le mail, mais la vérification de la syntaxe de l'expéditeur ne fonctionne pas.
Je m'explique, une fois devant le formulaire, je peu taper n'importe quoi, meme laisser le champs expéditeur vide, je peux envoyer mon mail sans problème, et dans ma boite mail, j'ai bien ce que j'ai tapé dans le champ.. (ou rien si je l'ai laissé vide)..
Le problème est une je réalise un site pour une petite PME, et ce formulaire va servir a envoyer des candidatures pour travailler... J'aimerais donc que le mail soit vérifié pour assurer une réponse..

Je test le script sur un FTP gratuit free. Ça peu venir d'eux?
Je ne pense pas car j'avais trouvé un autre script avant celui la, et la vérification mail marchait (mais pas al pièce jointe ^^')
J'ai essayer de "mixer" les 2 codes mais étant débutant en PHP, je n'y suis pas parvenu..

Merci

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales