Page 1 sur 1

piece jointe

Posté : 13 avr. 2010, 15:50
par Emilie007
Bonjour à tous,
pourriez vous m'aider pour un bout de code s'il vous plait ?

actuellement j'ai un code en PHP qui me permet d'envoyer un mail à une personne qui s'inscrit via un formulaire et d'en recevoir une copie par mail également.
mon souci, c'est que je voudrai y inclure une pièce jointe... j'ai trouvé plusieurs bout de code mais rien ne va avec le code que j'ai déjà. je vous montre :

<?php
// On commence par récupérer les champs
if(isset($_POST['NOM'])) $NOM=$_POST['NOM'];
else $NOM="";

if(isset($_POST['PRENOM'])) $PRENOM=$_POST['PRENOM'];
else $PRENOM="";

if(isset($_POST['SOCIETE'])) $SOCIETE=$_POST['SOCIETE'];
else $SOCIETE="";

if(isset($_POST['EMAIL'])) $EMAIL=$_POST['EMAIL'];
else $EMAIL="";
if(isset($_POST['robot'])) $robot=$_POST['robot'];
else $robot="";

// On vérifie si les champs sont vides
if(empty($NOM) OR empty($PRENOM) OR empty($EMAIL) OR empty($robot))
{
echo '<div align="center"><font color="red">Tous les champs sont obligatoires</font></div>';

}

// Aucun champ n'est vide, on peut enregistrer dans la table
else
{


if ($_POST["robot"]!="WABG"){ header('Location:http://www.erreur.com);}



// connexion a la base
$dbh=mysql_connect ("localhost:3306", "LOGIN", "PASS") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("BD");



// on regarde si l'url existe déjr
$sql = "SELECT * FROM CONTACT WHERE EMAIL='$EMAIL' AND NOM='$NOM'";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

// on compte le nombre de résultats
$res = mysql_num_rows($req);

if($res!=0) // l'url existe déjr, on affiche un message d'erreur
{
echo '<div align="center"><font color="#fc6f10" size="2" font-family="Arial">Ce compte existe déjà.</font></div>';
}
else // L'url n'existe pas, on inscre les informations du formulaire dans la table
{


// on écrit la requete sql

$sql = "INSERT INTO CONTACT(NOM, PRENOM, SOCIETE, EMAIL) VALUES('$NOM','$PRENOM','$SOCIETE','$EMAIL')";


// on inscre les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

// on affiche le résultat pour le visiteur

echo '<div align="center"><font color="#44a64e" size="2" font-family="Arial">Nous avons bien enregistré votre demande. </font></div>';
$destinataire="[email protected]"; // Mettez ici votre adresse e-mail pour recevoir les infos de l'inscrit
$objet="INSCRIPTION VISITEUR LIBRE "; // Titre du mail automatique
$son_nom=$_POST["NOM"];
$son_prenom=$_POST["PRENOM"];
$sa_societe=$_POST["SOCIETE"];
$son_mail=$_POST["EMAIL"];

$message_envoi="INSCRIPTION VISITEUR LIBRE \n \n";

$message_envoi.="Société du contact : ".$_POST["SOCIETE"]." \n";
$message_envoi.="Prénom du contact : ".$_POST["PRENOM"]." \n";
$message_envoi.="Nom du contact : ".$_POST["NOM"]." \n";
$message_envoi.="Email du contact : ".$_POST["EMAIL"]." \n";





$entete = "From: " . $son_mail . " \n"; // On prépare l'entete du message
mail($destinataire,$objet,$message_envoi,$entete); // Envoi du message

// Etape pour que l'inscrit reçoive un mail de confirmation


$message_envoi2="Bonjour, \n \n";
$message_envoi2.="Votre demande d'inscription en tant que visiteur libre \n";

$message_envoi2.="a bien été enregistrée. \n\n";
$message_envoi2.="Vos informations : \n";
$message_envoi2.="".$_POST["NOM"]. "\n";
$message_envoi2.="".$_POST["PRENOM"]." \n";
$message_envoi2.="".$_POST["SOCIETE"]." \n";
$message_envoi2.="".$_POST["EMAIL"]. "\n \n";



$destinataire2=$_POST["EMAIL"];
$entete2="From: [email protected]";
mail ($destinataire2,$objet,$message_envoi2,$entete2);


}



// gestion de l'affichage du captcha
$monfichier=fopen("captcha.txt","r");
$i=1;
while(!feof($monfichier)){
$montab[$i]=fgets($monfichier,4096);
$i++;
}
fclose($monfichier);
shuffle($montab);
$elem0=explode(";",$montab[1]);
$elem1=explode(";",$montab[2]);
$elem2=explode(";",$montab[3]);
$phrase=$elem0[1];
$_SESSION["phrase"]=$phrase;
$img="<div class='img'><img src='".$elem0[1]."' /></div>";
//fin de gestion du captcha

}
?>

Re: piece jointe

Posté : 13 avr. 2010, 17:00
par Emilie007
J'ai modifié la partie : pour que l'inscrive recoive un mail de confirmation. et ça donne ça :

// Etape pour que l'inscrit reçoive un mail de confirmation


$delimiteur = md5(uniqid(rand())); // Création d'un numéro unique, qui délimitera les différents blocs du mail

$piecejointe = "Invitation_PREVIRISQ.pdf"; // Déclaration du fichier à envoyer en tant que pièce jointe
$contenupiecejointe = file_get_contents($piecejointe); // Récupération du contenu du fichier
$contenupiecejointe = chunk_split(base64_encode($contenupiecejointe)); // Conversion du fichier : respect du format RFC 2045
$typepiecejointe = filetype($piecejointe); // Récupération du type du fichier


$entete_2.= "X-Priority: 1 \n";
$entete_2.= "MIME-Version: 1.0 \n";
$entete_2.= "Content-Type: multipart/mixed; boundary=\"$delimiteur\" \n"; // Déclaration du type du mail et du délimiteur
$entete_2.= " \n";

$message_envoi2.= "--$delimiteur \n"; // Séparation du bloc "entete" et du bloc "message" par notre délimiteur
$message_envoi2.= "Content-Type: text/html; charset=\"iso-8859-1\" \n"; // Déclaration du type du message ainsi que la charte de codage
$message_envoi2.= "Content-Transfer-Encoding:8bit\n"; // Déclaration du type de codage

$message_envoi2="Bonjour, \n \n";
$message_envoi2.="Votre demande d'inscription en tant que visiteur libre \n";
$message_envoi2.="a bien été enregistrée. \n\n";
$message_envoi2.="Vos informations : \n";
$message_envoi2.="".$_POST["NOM"]. "\n";
$message_envoi2.="".$_POST["PRENOM"]." \n";
$message_envoi2.="".$_POST["SOCIETE"]." \n";
$message_envoi2.="".$_POST["EMAIL"]. "\n \n";



$message_envoi2.= "--$delimiteur \n"; // Séparation du bloc "message" et du bloc "pièce jointe" par notre délimiteur
$message_envoi2.= "Content-Type: $typepiecejointe; name=\"$piecejointe\" \n"; // Déclaration du type et du nom de la pièce jointe
$message_envoi2.= "Content-Transfer-Encoding: base64 \n"; // Déclaration du type de codage
$message_envoi2.= "Content-Disposition: attachment; filename=\"$piecejointe\" \n"; // attachment = pièce jointe = fichier à sauvegarder
$message_envoi2.= "\n";
$message_envoi2.= $contenupiecejointe." \n"; // Insertion du fichier
$message_envoi2.= "\n";
$message_envoi2.= "--$delimiteur"; // Délimitation de la fin de la pièce jointe, et du mail



$destinataire2=$_POST["EMAIL"];
$entete2="From: [email protected]";
mail ($destinataire2,$objet,$message_envoi2,$entete2);


}


quand je reçois le mail de confirmation, je n'ai pas ma pièce jointe :cry: :cry: :cry: :cry: ca m'affiche plein de lettre et chiffre mais pas ma piece jointe...

Re: piece jointe

Posté : 13 avr. 2010, 17:49
par enneite
Bon, alors voilà un petit script qui permet d'envoyer un email avec pièce jointe
/********************************variables de départ****************************************************************/
//
//chemin du fichier du type:
// $chemin_fichier= "C:/dossier/sousdossier/nom_fichier.pdf" ;
//
//message avec lequel on veut envoyer un pièce jointe:
// $message="blablabla"; //c'est une variable texte et pas du code HTML (dsl)!
//
//sujet du message
//$sujet="test";
//l'expediteur supposé :
//$from="[email protected]";
//le destinataire du message
//$to="[email protected]";


/***********************Une fois qu'on a définit l'expediteur, le destinataire********************************/
/**********************Et qu'on a généré le message que l'on souhaite envoyé au format text***********/
/***********************Voici le code qui permet d'envoyer un email avec pièce jointe*******************/



$boundary = "_".md5 (uniqid (rand()));


//on recupere le contenu du fichier joint
$attached_file = file_get_contents($chemin_fichier); //file name ie: ./image.jpg
$attached_file = chunk_split(base64_encode($attached_file));


//bon ici on ne va garder que le nom du fichier pour le nommage du nom du fichier dans le mail
//mais on pourrait le faire autrement
//
$pos=strrpos($chemin_fichier,"/");
if($pos!==false)$file_name=substr($chemin_fichier,$pos+1);
else $file_name=$chemin_fichier;

//ici on récupère le type du fichier pdf ou txt ... (si on arrive à le déterminer)
$pos=strrpos($chemin_fichier,".");
if($pos!==false)$file_type="/".substr($chemin_fichier,$pos+1);
else $file_type="";

//echo "file_type=$file_type";
$attached = "\n\n". "--" .$boundary . "\nContent-Type: application".$file_type."; name=\"$file_name\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment; filename=\"$file_name\"\r\n\n".$attached_file . "--" . $boundary . "--";

$headers ="From: ".$from." \r\n";
$headers .= "MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$boundary\"\r\n";

$body = "--". $boundary ."\nContent-Type: text/plain; charset=ISO-8859-1\r\n\n".$message . $attached;




$res = mail($to,$from,$body,$headers);

Re: piece jointe

Posté : 13 avr. 2010, 17:56
par Emilie007
Merci pour ce code :)
j'ai 2 questions :
- concernant le chemin du fichier PDF ça peut etre comme ca ? :
$chemin_fichier= "http://www.web.com/nom_fichier.pdf" ; ou il faut obligatoirement que le fichier soit stocker sur l'ordinateur ?

- concernant le message, je peux quand même récupérer mes variables ? comme suit :
$message="Bonjour, \n \n";
$message.="Votre demande d'inscription en tant que visiteur libre \n";
$message.="a bien été enregistrée. \n\n";
$message.="Vos informations : \n";
$message.="".$_POST["NOM"]. "\n";
$message.="".$_POST["PRENOM"]." \n";
$message2.="".$_POST["SOCIETE"]." \n";
$message.="".$_POST["EMAIL"]. "\n \n";

Re: piece jointe

Posté : 13 avr. 2010, 18:14
par Emilie007
Ca marche nikel !!! Merciiiiii :D :D

Re: piece jointe

Posté : 14 avr. 2010, 15:29
par Emilie007
Par contre, j'ai un autre problème, c'est que mon objet de message n'est pas pris en compte :( voici mon code

//chemin du fichier du type:
$chemin_fichier= "http://www.previrisq2010.com/PDF/Invita ... VIRISQ.pdf" ;

//message avec lequel on veut envoyer un pièce jointe:


$message="Bonjour " \n\n";


//sujet du message
$objet="DOSSIER D'INFORMATION ";
//l'expediteur supposé :
$from="[email protected]";
//le destinataire du message
$to=$_POST["EMAIL"];


/***********************Une fois qu'on a définit l'expediteur, le destinataire********************************/
/**********************Et qu'on a généré le message que l'on souhaite envoyé au format text***********/
/***********************Voici le code qui permet d'envoyer un email avec pièce jointe*******************/



$boundary = "_".md5 (uniqid (rand()));


//on recupere le contenu du fichier joint
$attached_file = file_get_contents($chemin_fichier); //file name ie: ./image.jpg
$attached_file = chunk_split(base64_encode($attached_file));


//bon ici on ne va garder que le nom du fichier pour le nommage du nom du fichier dans le mail
//mais on pourrait le faire autrement
//
$pos=strrpos($chemin_fichier,"/");
if($pos!==false)$file_name=substr($chemin_fichier,$pos+1);
else $file_name=$chemin_fichier;

//ici on récupère le type du fichier pdf ou txt ... (si on arrive à le déterminer)
$pos=strrpos($chemin_fichier,".");
if($pos!==false)$file_type="/".substr($chemin_fichier,$pos+1);
else $file_type="";

//echo "file_type=$file_type";
$attached = "\n\n". "--" .$boundary . "\nContent-Type: application".$file_type."; name=\"$file_name\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment; filename=\"$file_name\"\r\n\n".$attached_file . "--" . $boundary . "--";

$headers ="From: ".$from." \r\n";
$headers.= "MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$boundary\"\r\n";

$body = "--". $boundary ."\nContent-Type: text/plain; charset=ISO-8859-1\r\n\n".$message . $attached;

$res = mail($to,$from,$body,$headers);



je reçois bien le mail, mais pas avec le bon objet et quand je déclare $objet dans mail(...) alors là je ne reçois plus le mail

Re: piece jointe

Posté : 15 avr. 2010, 12:01
par enneite
ouais, scuze, en fiat, il y aeu une petite coquille

dans la dernière ligne :

$res = mail($to,$from,$body,$headers);

C'est pas bon, en fait le from est passé dans la varibale $headers
il faut mettre cela à la place:

$res = mail($to,$sujet,$body,$headers);

là cela devrait être bon, désolé