Traitement formulaire par mail

Fermé
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 17 avril 2009 à 12:21
bg62 Messages postés 23590 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 15 avril 2024 - 17 avril 2009 à 17:19
Bonjour,

voila j'essaie d'utiliser ce script pour traiter un formulaire pour envoi par mail avec piece jointe. Mon souci c'est que je reçois le mail mais tout est vide et apparemment il y a une piece jointe puisque s'affiche le trombone mais je ne peux pas l'ouvrir. Voila ce que je reçois dans mon mail :

Commentaires :

Poste recherche :
Email :
Date de naissance :
Adresse :
Tel. :

Avez vous une idée?

voila le contenu du fichier de traitement formmail.php :

$dest="test@toto.fr";
$reponse=StripSlashes(" bla bla");

/* FIN DU PARAMETRAGE */


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);
$subject="Candidature de : 
$subject";

$emploi=StripSlashes($emploi);
$adresse=StripSlashes($adresse);
$date_naissance=StripSlashes($date_naissance);
$email=StripSlashes($email);

$msg=StripSlashes($msg);
$msg="Commentaires :
$msg

Poste recherche : $emploi
Email : $email
Date de naissance : $date_naissance
Adresse : $adresse
Tel. : $telephone";

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

?>

A voir également:

5 réponses

bg62 Messages postés 23590 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 15 avril 2024 2 362
17 avril 2009 à 12:46
dis-nous plutôt ce que tu veux exactement dans ton formulaire ... ce sera plus simple de le faire que de le corriger !
0
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
17 avril 2009 à 13:07
Merci. En faites, j'ai une page html qui est un formulaire de contact avec envoi de piece jointe et je souhaite faire le traitement en php pour envoyer le resultat par mail avec la piece jointe. Les champs de mon formulaire sont :

emploi <- champ obligatoire
email <- champ obligatoire
nom/prenom <- champ obligatoire
telephone <- champ obligatoire
adresse
date de naissance
commentaires
piece jointe
l'imperatif est que dans le fichier de traitement php je dois inséré du code html et css. par exemple de la façon suivante :
$reponse=StripSlashes(" 
<HTML>
<style type=\"text/css\">
</style>
<HEAD>
<TITLE>toto</TITLE>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
<meta http-equiv=\"Content-Language\" content=\"fr, en\">
<meta name=\"robots\" content=\"index,follow,all\" />
<meta name=\"rating\" content=\"General\">
<meta name=\"distribution\" content=\"Global\">
<meta name=\"Date-Creation-yyyymmdd\" content=\"20030102\">
<meta name=\"revisit-after\" content=\"7 days\">
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
<style type=\"text/css\">
<!--
.Style1 {
	font-size: 10px;
	color: #FFBB1C;
}
-->
</style>
<style type=\"text/css\">
.txt{
font-family:tahoma;
font-size:11px;
color:#5050505;
}

");


Puis en fin de fichier :
echo "$reponse";


Merci pour ton aide.
0
bg62 Messages postés 23590 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 15 avril 2024 2 362
17 avril 2009 à 15:01
emploi <- champ obligatoire
email <- champ obligatoire
nom/prenom <- champ obligatoire
telephone <- champ obligatoire
adresse
date de naissance
commentaires 

je peux te faire mais il n'y aura pas la pièce jointe
b g
0
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
17 avril 2009 à 16:49
Merci beaucoup pour ta proposition mais je préfère essayer de trouver par moi même car je galère mais au moins j'apprends.

Mais encore une fois merci.
0

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

Posez votre question
bg62 Messages postés 23590 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 15 avril 2024 2 362
17 avril 2009 à 17:19
0