mail() et pièces jointes [php] - PHP - Programmation
Marsh Posté le 29-12-2008 à 23:03:30
C'est le format de ton message qui n'est pas bon, tu te contentes de rajouter des headers et la pièce basesoixantequatrisée, sans rajouter de boundary. Regarde à droite à gauche comment en générer un, et spliter le mail en plusieurs parties.
Aussi y'a une faille de sécurité, on peut injecter des headers supplémentaires via $nom ou $email (suffit d'un retour chariot au début du nom, et hop on peut rajouter genre un entête Bcc pour spammer qui on veut).
Et ta regexp de vérification du format de l'adresse e-mail est invalide, elle interdit plein de caractères (genre + ou _), alors qu'ils sont parfaitement valides. Utilises plutôt un truc du style "^.+@.+$", de toute manière si quelqu'un veut pas mettre de mail il peut mettre un truc bidon.
Marsh Posté le 30-12-2008 à 12:41:09
merci,
j'ai ajouté des boundary, mais voilà ce que m'affiche mon mail :
Un nouveau message est arrivé
Nom : SCORDIA Candy
E-mail : scordia-candy@live.fr
Message : blabla -------=15db258f1219823b9e5f5c9c64a5a81d
pourquoi n'ai - je pas l'image ? à la place de ce code ?
Marsh Posté le 30-12-2008 à 12:50:00
T'as précisé aussi dans l'entête de base le boundary ? C'est assez le bordel à gérer. Donc y'a pas que multipart/mixed à mettre, faut aussi préciser le boundary :
Code :
|
Marsh Posté le 30-12-2008 à 13:03:31
// destinataire
$destinataire=$art;
//sujet
$sujet="Formulaire de contact";
// on génère une chaîne de caractères aléatoire qui sera utilisée comme frontière
$boundary = "-----=" . md5( uniqid ( rand() ) );
//entete
$entete= 'From:'.$nom.' <'.$email.'>'."\n";
//$entete .= "Bcc: candy.sc@wanadoo.fr\n";
$entete .= "MIME-Version: 1.0\n";
$entete .='Content-Type: multipart/mixed; boundary="'. $boundary . '"' . "\r\n";
//message
$msg= "Ceci est un message au format MIME 1.0 multipart/mixed.\n\n";
$msg .= "--" . $boundary . "\n";
$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$msg .= "Content-Transfer-Encoding: 8bit\n\n";
$msg .= "Un nouveau message est arrivé \n";
$msg .= "Nom : $nom \n";
$msg .= "E-mail : $email \n";
$msg .= "Message : $message ";
$msg .= "--" . $boundary . "\n";
//PIECE JOINTE
$file_name = $_POST['pj'];
if(file_exists($file_name))
{
$file_type = filetype($file_name);
$file_size = filesize($file_name);
$content_encode = chunk_split(base64_encode(file_get_contents($file_name)));
$msg .= 'Content-Type:'.$file_type.'; name="'.$file_name.'"'."\n";
$msg .= 'Content-Transfer-Encoding: base64'."\n";
$msg .= "Content-Disposition: attachment; filename=\"".$file_name."\"\n\n";
$msg .= $content_encode . "\n";
}
$msg .= "\n\n";
$msg .= "--" . $boundary . "--\n";
mail($destinataire,$sujet,$msg,$entete); // fonction mail() qui permet l'envoi
?>
si tu trouves l'erreur, ce serait sympa de me la dire, car la je suis perdue, je m'aide d'exemple et j'arrive pas.
Marsh Posté le 29-12-2008 à 22:54:39
bonjour...
Ce que je veux faire, c'est créer un formulaire de contact avec pièces jointes.
j'ai donc créé un formulaire de contact qui fonctionne très bien à part les pièces jointes.
Je sais qu'il existe des codes utilisant la POO, mais j'aimerai garder le mien.
j'ai ajouté à mon code de départ la partie $filen_name... concernant les pièces jointes (code trouvé sur internet)
Mon script envoi un e-mail mais PAS la pièce jointe..... Est-ce que quelqu'un pourrait me dire comment résoudre mon problème. MERCI
Voici mon code.
Message édité par yuxi le 30-12-2008 à 17:23:06