Formulaire d'envoi mail avec PJ
Résolu
djinlemage
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
djinlemage Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
djinlemage Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
6 réponses
Bonjour,
Ton fopen est en "r", lecture seul. Or le fichier n'est pas encore créer, donc il bloque, essaye plutôt avec w+
Ton fopen est en "r", lecture seul. Or le fichier n'est pas encore créer, donc il bloque, essaye plutôt avec w+
Bonjour,
Alors j'ai un peu avancé.
J'arrive à envoyer mon mail mais avec une seule PJ :
Alors j'ai un peu avancé.
J'arrive à envoyer mon mail mais avec une seule PJ :
$mail = 'monmail@a.moi'; // Déclaration de l'adresse de destination. if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues. { $passage_ligne = "\r\n"; } else { $passage_ligne = "\n"; } $formcivilite = htmlentities($_POST['civilite']); $formnom = htmlentities($_POST['nom']); // htmlentities() convertit des caractères "spéciaux" en équivalent HTML $formprenom = htmlentities($_POST['prenom']); $formemail = htmlentities($_POST['email']); $formtel = htmlentities($_POST['tel']); $formobjet = htmlentities($_POST['objet']); $formmessage = htmlentities($_POST['message']); $formletmotiv = $_FILES['filemotiv']['tmp_name']; $formcv = $_FILES['filecv']['tmp_name']; //=====Déclaration des messages au format texte et au format HTML. $message_txt = "Salut à tous, voici un e-mail envoyé par un script PHP."; $message_html = "<html><head></head><body><b>Salut à tous</b>, voici un e-mail envoyé par un <i>script PHP</i>.</body></html>"; //=====Lecture et mise en forme de la pièce jointe. //$fichier = fopen("image.jpg", "r"); //$attachement = fread($fichier, filesize("image.jpg")); //$attachement = chunk_split(base64_encode($attachement)); //fclose($fichier); $fichiermotiv = fopen($formletmotiv, "r"); $attachementmotiv = fread($fichiermotiv, filesize("$formletmotiv")); $attachementmotiv = chunk_split(base64_encode($attachementmotiv)); fclose($fichiermotiv); $fichiercv = fopen($formcv, "r"); $attachementcv = fread($fichiercv, filesize("$formcv")); $attachementcv = chunk_split(base64_encode($attachementcv)); fclose($fichiercv); //=====Création de la boundary. $boundary = "-----=".md5(rand()); $boundary_alt = "-----=".md5(rand()); //=====Définition du sujet. $sujet = "Hey mon ami !"; //=====Création du header de l'e-mail. $header = "From: \"test\"<test@mail.fr>".$passage_ligne; $header.= "Reply-to: \"test\" <test@mail.fr>".$passage_ligne; $header.= "MIME-Version: 1.0".$passage_ligne; $header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne; //=====Création du message. $message = $passage_ligne."--".$boundary.$passage_ligne; $message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne; $message.= $passage_ligne."--".$boundary_alt.$passage_ligne; //=====Ajout du message au format texte. $message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne; $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne; $message.= $passage_ligne.$message_txt.$passage_ligne; //========== $message.= $passage_ligne."--".$boundary_alt.$passage_ligne; //=====Ajout du message au format HTML. $message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne; $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne; $message.= $passage_ligne.$message_html.$passage_ligne; //=====On ferme la boundary alternative. $message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne; //========== $message.= $passage_ligne."--".$boundary.$passage_ligne; //=====Ajout de la pièce jointe. $message.= "Content-Type: text/plain; name=\"cv.txt\"".$passage_ligne; $message.= "Content-Type: text/plain; name=\"motiv.txt\"".$passage_ligne; $message.= "Content-Transfer-Encoding: base64".$passage_ligne; $message.= "Content-Disposition: attachment; filename=\"cv.txt\"".$passage_ligne; $message.= "Content-Disposition: attachment; filename=\"motiv.txt\"".$passage_ligne; $message.= $passage_ligne.$attachementcv.$passage_ligne.$attachementmotiv.$passage_ligne; $message.= $passage_ligne."--".$boundary."--".$passage_ligne; //=====Envoi de l'e-mail. mail($mail,$sujet,$message,$header); ?>
De ce que j'ai compris d'une explication ici (https://www.developpez.net/forums/d1399016/php/langage/formulaire-d-envoi-mail-pj/#post7605577),le code ci dessous permet de télécharger le fichier
Enfin pas le télécharger mais de le lire et de creer la piece joint pour le mail :
Pour preuve que j'ai 1 mail avec la 1ère PJ mais pas la 2ème...
Merci en tous cas de tes remarques :)
Enfin pas le télécharger mais de le lire et de creer la piece joint pour le mail :
$fichiermotiv = fopen($formletmotiv, "r"); $attachementmotiv = fread($fichiermotiv, filesize("$formletmotiv")); $attachementmotiv = chunk_split(base64_encode($attachementmotiv)); fclose($fichiermotiv); $fichiercv = fopen($formcv, "r"); $attachementcv = fread($fichiercv, filesize("$formcv")); $attachementcv = chunk_split(base64_encode($attachementcv)); fclose($fichiercv);
Pour preuve que j'ai 1 mail avec la 1ère PJ mais pas la 2ème...
Merci en tous cas de tes remarques :)
Yess ça marche !!!
Voici le code pour ceux que ça intéresse :
Voici le code pour ceux que ça intéresse :
[code] <?php //recup des variable du formulaire// htmlentities() convertit des caractères "spéciaux" en équivalent HTML $formcivilite = htmlentities($_POST['civilite']); $formnom = htmlentities($_POST['nom']); $formprenom = htmlentities($_POST['prenom']); $formemail = htmlentities($_POST['email']); $formtel = htmlentities($_POST['tel']); $formcv = $_FILES['filecv']['tmp_name']; $formletmotiv = $_FILES['filemotiv']['tmp_name']; //var pour test champs $extensions = array('.txt', '.doc', '.docx', '.odt', '.pdf'); $extensioncv = strrchr($_FILES['filecv']['name'], '.'); $extensionmotiv = strrchr($_FILES['filemotiv']['name'], '.'); $taillecv = filesize($_FILES['filecv']['tmp_name']); $taillemotiv = filesize($_FILES['filemotiv']['tmp_name']); $taille_maxi = 2000000; //max 2Mo $champs_vide = 'Le champs est vide.'; $fichier_vide = 'Pas de fichier sélectionné.'; $fichier_erreur_ext = 'Le type de fichier </br>n\'est pas valide.'; $fichier_erreur_taille = 'Le fichier est trop volumineux'; //var pour test mail $atom = '[-a-z0-9!#$%&\'*+\\/=?^_'{|}~]'; // caractères autorisés avant l'arobase $domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // caractères autorisés après l'arobase (nom de domaine $regex = '/^' . $atom . '+' . // Une ou plusieurs fois les caractères autorisés avant l'arobase '(\.' . $atom . '+)*' . // Suivis par zéro point ou plus // séparés par des caractères autorisés avant l'arobase '@' . // Suivis d'un arobase '(' . $domain . '{1,63}\.)+' . // Suivis par 1 à 63 caractères autorisés pour le nom de domaine // séparés par des points $domain . '{2,63}$/i'; //test si champ vide if(empty($formcivilite)) { $vide_civilite = $champs_vide; } if (empty($formnom)) { $vide_nom = $champs_vide; } if (empty($formprenom)) { $vide_prenom = $champs_vide; } if (empty($formtel)) { $vide_tel = $champs_vide; } //test si champ mail vide PUIS format adresse mail if (empty($formemail)) { $vide_mail = $champs_vide; } elseif(!preg_match($regex,$formemail)) { $erreur_adressemail = "($formemail) n'est pas une adresse email valide."; } //CV test si aucun fichier PUIS test extention PUIS la taille du fichier if (empty($formcv)) { $vide_CV = $fichier_vide; } elseif(!in_array($extensioncv, $extensions)) //Si l'extension n'est pas dans le tableau { $erreur_extcv = $fichier_erreur_ext; } elseif($taillecv>$taille_maxi) { $erreur_taillecv = $fichier_erreur_taille; } //Motiv test si aucun fichier PUIS test extention PUIS la taille du fichier if (empty($formletmotiv)) { $vide_motiv = $fichier_vide; } elseif(!in_array($extensionmotiv, $extensions)) //Si l'extension n'est pas dans le tableau { $erreur_extmotiv = $fichier_erreur_ext; } elseif($taillemotiv>$taille_maxi) { $erreur_taillemotiv = $fichier_erreur_taille; } //-------------------- //Test si toutes les variables d erreur sont vide pour envoyer le mail if((!isset($vide_civilite)) && (!isset($vide_nom)) && (!isset($vide_prenom)) && (!isset($vide_mail)) && (!isset($erreur_adressemail)) && (!isset($vide_tel)) && (!isset($vide_CV)) && (!isset($vide_motiv)) && (!isset($erreur_extcv)) && (!isset($erreur_extmotiv)) && (!isset($erreur_taillecv)) && (!isset($erreur_taillemotiv))) { $mail = 'monmail@moi.fr'; // Déclaration de l'adresse de destination. if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues. { $passage_ligne = "\r\n"; } else { $passage_ligne = "\n"; } //=====Déclaration des messages au format texte et au format HTML. //$message_txt = "Salut à tous, voici un e-mail envoyé par un script PHP."; $message_html = "<html><head></head><body><b>".$formcivilite." ".$formnom."</b> a envoyé une demande de candidature via le site Internet.</body>"; $message_html.= $passage_ligne; $message_html.= "<body><br></br><b>Nom : </b>".$formcivilite." ".$formnom; $message_html.= "<br></br><b>Prénom : </b>".$formprenom; $message_html.= "<br></br><b>Adresse Email : </b>".$formemail; $message_html.= "<br></br><b>Téléphone : </b>".$formtel; $message_html.= "<br></br><b>En PJ, vous trouverez le CV et la lettre de motivation.</b>"; $message_html.= "</body></html>"; $message_html = mb_convert_encoding($message_html,'HTML-ENTITIES','utf-8'); //=====Lecture et mise en forme de la pièce jointe. //PJ1 $fichiermotiv = fopen($formletmotiv, "r"); $attachementmotiv = fread($fichiermotiv, filesize("$formletmotiv")); $attachementmotiv = chunk_split(base64_encode($attachementmotiv)); fclose($fichiermotiv); //PJ2 $fichiercv = fopen($formcv, "r"); $attachementcv = fread($fichiercv, filesize("$formcv")); $attachementcv = chunk_split(base64_encode($attachementcv)); fclose($fichiercv); //=====Création de la boundary. $boundary = "-----=".md5(rand()); $boundary_alt = "-----=".md5(rand()); //=====Définition du sujet. $sujet = "Demande de recrutement"; //=====Création du header de l'e-mail. $header = "From: \"test\"<test@mail.fr>".$passage_ligne; $header.= "Reply-to: \"test\" <test@mail.fr>".$passage_ligne; $header.= "MIME-Version: 1.0".$passage_ligne; $header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne; //=====Création du message. $message = $passage_ligne."--".$boundary.$passage_ligne; $message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne; $message.= $passage_ligne."--".$boundary_alt.$passage_ligne; //=====Ajout du message au format texte. //$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne; //$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne; //$message.= $passage_ligne.$message_txt.$passage_ligne; //========== $message.= $passage_ligne."--".$boundary_alt.$passage_ligne; //=====Ajout du message au format HTML. $message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne; $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne; $message.= $passage_ligne.$message_html.$passage_ligne; //=====On ferme la boundary alternative. $message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne; //=====Ajout de la PJ1. $message.= $passage_ligne."--".$boundary.$passage_ligne; $message.= "Content-Type: text/plain; name=\"cv$extensioncv\"".$passage_ligne; $message.= "Content-Transfer-Encoding: base64".$passage_ligne; $message.= "Content-Disposition: attachment; filename=\"cv$extensioncv\"".$passage_ligne; $message.= $attachementcv.$passage_ligne; $message.= "--".$boundary.$passage_ligne; //Ajout de la PJ2 $message.= $passage_ligne."--".$boundary.$passage_ligne; $message.= "Content-Type: text/plain; name=\"motiv$extensionmotiv\"".$passage_ligne; $message.= "Content-Transfer-Encoding: base64".$passage_ligne; $message.= "Content-Disposition: attachment; filename=\"motiv$extensionmotiv\"".$passage_ligne; $message.= $attachementmotiv.$passage_ligne; $message.= "--".$boundary.$passage_ligne; //---------------------------- $message.= $passage_ligne."--".$boundary."--".$passage_ligne; //=====Envoi de l'e-mail. mail($mail,$sujet,$message,$header); } else { echo "Probleme"; echo $vide_civilite; echo $vide_nom; echo $vide_prenom; echo $vide_tel; echo $vide_mail; echo $erreur_adressemail; echo $vide_CV; echo $erreur_extcv; echo $erreur_taillecv; echo $vide_motiv; echo $erreur_extmotiv; echo $erreur_taillemotiv; }[/code]
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonsoir,
l'envoi de mail en php est fait depuis le serveur, il faut donc que le fichier joint soit sur le serveur au moment de l'envoi.
Tu as bien mis dans ton formulaire un input type file pour permettre au candidat de sélectionner le fichier dans son ordi, mais je ne vois pas dans ton code la partie qui upload le fichier de l'ordi vers le serveur.. partie qui devrait être juste avant la partie envoi du mail.
l'envoi de mail en php est fait depuis le serveur, il faut donc que le fichier joint soit sur le serveur au moment de l'envoi.
Tu as bien mis dans ton formulaire un input type file pour permettre au candidat de sélectionner le fichier dans son ordi, mais je ne vois pas dans ton code la partie qui upload le fichier de l'ordi vers le serveur.. partie qui devrait être juste avant la partie envoi du mail.
je réitère ma précédente remarque:
je ne vois nulle part dans ton code la partie php qui gère upload les deux fichiers LM et CV du micro de l'internaute vers le serveur
( c'est comme si tu demandait à La poste d'envoyer un colis que tu ne leur a pas encore apporté )
Ensuite regardes du côté de la classe PhpMailer
deux liens:
http://www.code-web.org/post/2007/11/20/27-l-envoit-d-e-mail-avec-php-c-est-simple-comme-phpmailer
https://www.dewep.net/realisations/envoyer-un-email-avec-phpmailer
je ne vois nulle part dans ton code la partie php qui gère upload les deux fichiers LM et CV du micro de l'internaute vers le serveur
( c'est comme si tu demandait à La poste d'envoyer un colis que tu ne leur a pas encore apporté )
Ensuite regardes du côté de la classe PhpMailer
deux liens:
http://www.code-web.org/post/2007/11/20/27-l-envoit-d-e-mail-avec-php-c-est-simple-comme-phpmailer
https://www.dewep.net/realisations/envoyer-un-email-avec-phpmailer