Envoil email avec php

Résolu/Fermé
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 - 19 oct. 2012 à 19:38
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 - 20 oct. 2012 à 23:31
Bonjour a tous,
Je m'excuse d'avance si la question que je pose est déja parut, mais j'ai eu beau chercher, je n'ai pas trouvé de réponse me permettant de comprendre.
J'ai crée mon script qui permet d'envoyer des mails, et également un partie réservée à l'envoie de pièce jointe.
Mais c'est la que je bute:
Sachant que fopen("chaine de carctères", "r"), que dois je entrer dans ma chaine de caractères lorsque je veux qu'elle récupère la variable de la pièce jointe de mon formulaire.??
j'ai beau entrer $_FILES["txtPieceJointe"]["name"], ou encore

(string)$_FILES["txtPieceJointe"]["name"], ca ne fonctionne pas..
Merci d'avance si vous avez des réponses à m'apporter.


A voir également:

15 réponses

mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 99
19 oct. 2012 à 19:55
Voici mon code, la partie qui me pose problème:

//=====Lecture et mise en forme de la pièce jointe.
$fichier = fopen($txtPhotoNom, "r");
$attachement = fread($fichier, filesize($txtPhotoNom));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========

Merci d'avance
0
Dj Nam Messages postés 327 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 31 janvier 2014 41
19 oct. 2012 à 22:10
Bonjour,

Pour pouvoir ajouter un fichier au mail il faut dans un premier temps uploader le fichier en question sur le serveur. As-tu bien réalisé cette étape ? Si oui, as-tu vérifié que le fichier est bien stocké sur le serveur dans le dossier où tu lui a demandé ?

Si l'upload est OK, et que le dossier de destination est /uploads/ et que ton fichier s'appelle exemple.pdf la fonction fopen devra ressembler à cela :
fopen("/uploads/exemple.pdf", "r");

0
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 99
19 oct. 2012 à 22:20
Salut!!
Je n'avais pas intégré qu'il fallait uploader le fichier avant.
Du coup ça me semble bcp plus logique en effet, puisque j'avais remarqué que la fonction fopen possède l' attribut de type string.
Bien que je vais essayé dessuite par mes moyens, généralement, on uploade le fichier à quel endroit sur mon script?Juste en suivant de mes vérifications??
Ci joint une partie de mon script:


$txtPhotoNom = $_FILES["txtPhoto"]["name"];
if($txtPhotoNom == ""){
$txtPhotoExtension = strtolower(strrchr($txtPhotoNom, "."));
if($txtPhotoNom != ".jpg" && $txtPhotoNom != ".jpeg"){
$envoieErreur = true;
$txtPhotoErreur = "Vous devez choisir une photo de format JPEG.";
}else{
$intPhotoPoids = (int)$_FILES ["txtPhotoNom"]["size"];
if($intPhotoPoids <= 0 || $intPhotoPoids > 2097152 ){
$envoieErreur = true;
$txtphotoErreur = "La photo doit être infèrieure à 2Mo.";
}
}

}

en tout cas je comprends un peu mieux, je te remercie bcp!!
0
Dj Nam Messages postés 327 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 31 janvier 2014 41
19 oct. 2012 à 22:28
Exactement, il faut procéder aux vérifications sur la variable $_FILES et si tout est OK alors là tu peux uploader le fichier et enfin le joindre à ton message.
Donc par exemple tu peux, juste après le code que tu viens de c/c, ajouter ceci :
if (^txtphotoErreur -- "") {
 // Upload de fichier avec move_uploaded_file
// Puis envoi du mail
}

0

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

Posez votre question
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 99
19 oct. 2012 à 22:30
merci bcp Maxime, j'essaye ça dessuite...^^
0
Dj Nam Messages postés 327 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 31 janvier 2014 41
19 oct. 2012 à 22:44
Si tu as besoin de plus d'infos sur l'upload de fichier, je te propose de jeter un oeil par ici : https://www.commentcamarche.net/faq/889-php-upload-de-fichiers
0
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 99
19 oct. 2012 à 22:51
je vais regarder ça de plus pret...En attendant, j'ai changé mon code, que je t'envoie en suivant, tu peux me dire ce que tu en penses...ca ne fonctionne pas, et je pensais pourtant bien faire...

Vérif
------------------------------------------------------------------------------------------------

$txtPhotoNom = $_FILES["txtPhoto"]["name"];
if($txtPhotoNom == ""){
$txtPhotoExtension = strtolower(strrchr($txtPhotoNom, "."));
if($txtPhotoNom != ".jpg" && $txtPhotoNom != ".jpeg"){
$envoieErreur = true;
$txtPhotoErreur = "Vous devez choisir une photo de format JPEG.";
}else{
$intPhotoPoids = (int)$_FILES ["txtPhotoNom"]["size"];
if($intPhotoPoids <= 0 || $intPhotoPoids > 2097152 ){
$envoieErreur = true;
$txtphotoErreur = "La photo doit être infèrieure à 2Mo.";
}
}

}

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

//=====Lecture et mise en forme de la pièce jointe.
$fichier = fopen("C:/wamp/www/php/inc/img/tmp_" . $txtPhotoNom , "r");
$attachement = fread($fichier, filesize("C:/wamp/www/php/inc/img/tmp_" . $txtPhotoNom));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========

//=====Création de la boundary
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========

//=====Définition du sujet.
$sujet = $_POST["txtSujet"];
//=========

//=====Création du header de l'e-mail.
$header = "From:" . $_POST["txtPseudo"] . "<" . $_POST["txtAdresse"] . ">".$passage_ligne;
$header.= "Reply-to:" . $_POST["txtPseudo"] . " <". $_POST["txtAdresse"] .">".$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: image/jpeg; name=\"" . $txtPhotoNom . "\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"" . $txtPhotoNom . "\"".$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//==========


//=====Envoi de l'e-mail.

if ($envoieErreur != true){
move_uploaded_file($_FILES["txtPhoto"]["tmp_name"], "C:/wamp/www/php/inc/img/tmp_" . $txtPhotoNom . ".jpg");
if(mail($mail,$sujet,$message,$header)){
echo 'Le mail a été envoyé';
$MailEnvoye = true;
echo $txtPhotoNom;
}
}
0
Dj Nam Messages postés 327 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 31 janvier 2014 41
19 oct. 2012 à 23:09
Avant tout, il est conseillé, lorsque tu copie ton code sur le forum, de le placer entre les balises <code> (ou en cliquant sur le dernière icône de la barre d'outils au dessus de la zone de texte).

Tu me dis que le code ne fonctionne pas, mais peux-tu me préciser à quel moment est-ce que ca ne fonctionne plus ? Est-ce lors de l'upload ou lors de l'envoi du mail ? Pour vérifier, il suffit de s'assurer que le fichier est bien enregistré dans ton dossier de destination.
0
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 99
19 oct. 2012 à 23:33
En fait voici mon code complet complet:
Quand je le teste, il me met un problème sur la ligne de code ou j'utilise fopen..au fond du code

puis d'autres, mais je pense qu'elles découlent de celle la..
Mon fichier tmp_ n'existe pas, et c'est ça que je ne comprend pas en fait.Je croyais que le fichier tmp dans la variable $_FILES["txtPhoto"]["tmp_name"], était automatiquement créee dans le dossier que l'on spécifiait..

Je suis désolé de t'embéter, mais j'essai de me débrouiller de manière autodidacte, mais ça ne fait que 1 mois que j'ai commencé..
En tout cas merci...


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Page protégée par mot de passe</title>
</head>

<body>
	

 <?php
	
	
			//-----------------------------------------------
			//DECLARE LES VARIABLES
			//-----------------------------------------------
			settype($envoie, "bool");
			settype($envoieErreur, "bool");
			settype($txtPseudo,"string");
			settype($txtPseudoErreur,"string");
			settype($txtSujet,"string");
			settype($txtSujetErreur,"string");
			settype($txtMessage,"string");
			settype($txtMessageErreur,"string");
			settype($txtAdresse,"string");
			settype($txtAdresseErreur,"string");
			settype($MailEnvoye, "bool");
			settype($txtPhotoNom, "string");
			settype($txtPhotoErreur, "string");
			//-----------------------------------------------
			//Déclaration de l'envoi du formulaire:
			
			$envoie = isset($_POST["envoie"]);

			if($envoie){

				//POur Pseudo
				$txtPseudo = $_POST["txtPseudo"];
				if($txtPseudo == ""){
					$envoieErreur = true;
					$txtPseudoErreur = "Vous devez renseigner un pseudo";
				}
				//Pour Sujet		
				$txtSujet = $_POST["txtSujet"];
				if($txtSujet == ""){
					$envoieErreur = true;
					$txtSujetErreur = "Vous devez renseigner un sujet";
				}
				//Pour Sujet		
				$txtMessage = $_POST["txtMessage"];
				if($txtMessage == ""){
					$envoieErreur = true;
					$txtMessageErreur = "Vous devez renseigner un message";
				}
				//Pour Adresse		
				$txtAdresse = $_POST["txtAdresse"];
				if($txtAdresse == ""){
					$envoieErreur = true;
					$txtAdresseErreur = "Vous devez renseigner une adresse mail valide";
				}
				//Pour photo
				
				$txtPhotoNom = $_FILES["txtPhoto"]["name"];
					if($txtPhotoNom == ""){
						$txtPhotoExtension = strtolower(strrchr($txtPhotoNom, "."));
						if($txtPhotoNom != ".jpg" && $txtPhotoNom != ".jpeg"){
							$envoiePhoto = true;					
							$txtPhotoErreur = "Vous devez choisir une photo de format JPEG.";
						}else{
							$intPhotoPoids = (int)$_FILES ["txtPhotoNom"]["size"];
							if($intPhotoPoids <= 0 || $intPhotoPoids > 2097152 ){
							$envoiePhoto = true;
							$txtphotoErreur = "La photo doit être infèrieure à 2Mo.";
							}
						}
						if(!$txtPhotoErreur = true){
							move_uploaded_file($txtPhotoNom, "C:/wamp/www/php/inc/img/tmp_" . $txtPhotoNom );
						}
					}
					
					
				
					
				
			
				//-----------------------------------------------
	
				$mail = "Monadressemail "; // 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 rencontrent des bogues.
				{
				$passage_ligne = "\r\n";
				}else{
				$passage_ligne = "\n";
				}
				//=====Déclaration des messages au format texte et au format HTML.
				$message_txt = $_POST["txtMessage"];
				$message_html = "<html><head></head><body>" . $_POST["txtMessage"] . "</body></html>";
				//==========
				
				//=====Lecture et mise en forme de la pièce jointe.
				$fichier   = fopen("C:/wamp/www/php/inc/img/tmp_/" . $txtPhotoNom, "r");
				$attachement = fread($fichier, filesize("C:/wamp/www/php/inc/img/tmp_" . $txtPhotoNom));
				$attachement = chunk_split(base64_encode($attachement));
				fclose($fichier);
				//==========
 
				//=====Création de la boundary
				$boundary = "-----=".md5(rand());
				$boundary_alt = "-----=".md5(rand());
				//==========
 
				//=====Définition du sujet.
				$sujet = $_POST["txtSujet"];
				//=========
 
				//=====Création du header de l'e-mail.
				$header = "From:" . $_POST["txtPseudo"] . "<" . $_POST["txtAdresse"] . ">".$passage_ligne;
				$header.= "Reply-to:" . $_POST["txtPseudo"] . " <". $_POST["txtAdresse"] .">".$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: image/jpeg; name=\"" . $txtPhotoNom . "\"".$passage_ligne;
				$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
				$message.= "Content-Disposition: attachment; filename=\"" . $txtPhotoNom . "\"".$passage_ligne;
				$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
				$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
				//========== 
 
			
				//=====Envoi de l'e-mail.

				if ($envoieErreur != true){
					if(mail($mail,$sujet,$message,$header)){
					echo 'Le mail a été envoyé';
					$MailEnvoye = true;
					echo $txtPhotoNom;
					}
				}
			}
			
			
			if(!$MailEnvoye){
			echo 	
			
			"<form method=\"post\" enctype=\"multipart/form-data\" action=" . $_SERVER['PHP_SELF'] . ">


			<label for=\"txtPseudo\">Entrez votre pseudo:</label><br />
			<input name=\"txtPseudo\"  id=\"txtPseudo\" value=" .$txtPseudo ."><span>" . $txtPseudoErreur . "</span><br />

			<label for=\"txtSujet\">Entrez votre sujet:</label><br />
			<input name=\"txtSujet\"  id=\"txtSujet\" value=" . $txtSujet . "><span>" . $txtSujetErreur . "</span><br />


			<label for=\"txtMessage\">Entrez votre message:</label><br />
			<textarea name=\"txtMessage\" cols=\"50\" rows=\"10\" id=\"txtMessage\">" . $txtMessage . "</textarea><span>" . $txtMessageErreur . "</span><br />

			<label for=\"txtAdresse\">Entrez votre adresse e-mail:</label><br />
			<input name=\"txtAdresse\"  id=\"txtAdresse\" value=" . $txtAdresse . "><br /><span>" . $txtAdresseErreur . "</span><br />
			
			<label for=\"txtPhoto\">
			<input type=\"file\" name=\"txtPhoto\" id=\"txtPhoto\" /><br /><span>" . $txtPhotoErreur . "</span><br />

			<input type=\"submit\" value=\"Envoyer\" name=\"envoie\" />
			</form>";
			}
?>  			
			
			
			</body>
			</html>


0
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 99
19 oct. 2012 à 23:39
avec mon code, quand je lance ma page, la première erreur est celle ci:
Warning: fopen(C:/wamp/www/php/inc/img/tmp_): failed to open stream: No such file or directory in C:\wamp\www\essaiSiteDuZero\EnvoiMail\Mail.php on line 102
0
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 99
20 oct. 2012 à 00:36
ca marche tjrs pas....
:(
0
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 99
20 oct. 2012 à 02:19
C'est bon, nikel...
ça fonctionne.
Je n'arrive pas à gérer toutes les erreurs pour les vérifs de la photo et ça me génère des erreurs, mais je pense que c'est juste des histoires de boucles, car quand j'envoie mon formulaire avec la photo (qui rentre dans les conditions), l'envoie est bien effectué..je me mélange un peu les pinceaux avec tous les if LOL ..Mais du coup ça devrait aller..
Je te remercie encore
Si j'ai des problèmes tjrs persistants pour mes vérifs, puis je te re-contacter?
A bientot
0
Dj Nam Messages postés 327 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 31 janvier 2014 41
20 oct. 2012 à 07:55
Bonjour,

Je suis ravis que tu en ai vu le bout. Pour les erreurs que tu as encore, n'hésite pas à les copier ici ainsi que les lignes de codes correspondant et je t'aiderais à y voir plus clair.
Si tu as d'autres soucis je serais évidement toujours disponible.

Bon courage pour la suite, pense à mettre le sujet en résolu :)
0
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 99
20 oct. 2012 à 20:25
Re Salut!
Bon c'est ok, j'ai réussi à faire mon formulaire avec l'envoie de la photo.
Les vérifs sont bonne dans le cas ou j'impose le scénario ou la personne doit entrer une photo.
Par contre je bataille terrible pour le scénario dans lequel la personne pourrait envoyer le message sans pièce jointe (ça serait assez logique qu'elle puisse le faire).
Et pourtant je ne comprend pas trop le principe dans le sens ou le content type n'est pas le même dans l'envoie avec ou sans pièce jointe..Dois je créer le scénario avec dans mon script les deux scripts?Avec et sans pièce jointe?Ca me semblerait logique mais bon...peut être u a t-il autre méthode..
Merci
0
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 99
20 oct. 2012 à 23:31
finalement, c'est bon j'ai trouvé...c'est trop bon d réfléchir et d'y arriver..a bientot
0