8723 sujets

Développement web côté serveur, CMS

Bonjour,
(posté dans le forum html car je ne trouve pas le forum php)

Il y a quelques années, j'utilisais la fonction php
mail($webmaster,$sujet,$contenu_message,$headers);

dans la page "contact" des sites que j'avais créé chez Free.

Mais, aujourd'hui je suis en train de créer un nouveau site pour mon groupe de musique, et je m'aperçois que cela ne fonctionne plus. J'ai alors cherché sur le net, dans les forums, j'ai essayé différents exemples d'envoi de mails, mais rien n'y fait, le mail a l'air de partir (aucune erreur php ni serveur) mais aucun mail n'arrive.
Je me suis dit que les paramètres avaient dû changer, j'ai essayé l'appli fantastique SendMail de Dipisoft, et là, oh surprise, ça fonctionne, mais en utilisant le smtp authentifié, codage SSL.

Quelqu'un saurait-il m'aider à modifier mon script pour pouvoir continuer à créer une page contact sur mon site ?

Merci d'avance.
Administrateur
Hello à toi,
windo a écrit :
(posté dans le forum html car je ne trouve pas le forum php)
Eh oui puisqu'il n'y a pas que PHP en langage serveur Smiley cligne

Je déplace ton sujet dans le salon "Développement web côté serveur, CMS".

Bonne journée.
Tout à fait basique, ça ne fonctionne pas ? Chez n'importe quel fournisseur.
<?php
$to=$_POST['mailpost'];
$sujet=$_POST['sujet'];
$message=$_POST['message'];
mail("mail_de_reception@untel.fr",$sujet,$message,$to);
echo '<p>Votre message a bien été envoyé.</p>';
?>

Modifié par Bongota (21 Jun 2023 - 14:48)
Voici mon code complet :

<?php include("header.php") ?>

<?php
//**************** CREE PAR MOUNIR R'QUIBA (MOON) (cosmoswarez@msn.com) ******************
//               18/08/2008                           !! COPYRIGHT !!
//--------A utiliser sans moderation [lol] --------------------------------------------------
//FORMULAIRE PHP + VERIFICATION + ENVOI DU MAIL

$webmaster = "moi@free.fr";
$startpage = "index.php";
$tel="";
$mail = "";

// Style pour le input et le textarea 
$style_input_blanc = "style =\"
color: #000000;
background-color: #ffffff\"";

$style_input_rouge ="style =\"
color: #000000;
background-color: #FFDBDB\"";

$style_textarea_blanc = "style = \"
color: #000000;
background-color: #ffffff\"";

$style_textarea_rouge = "style =\"
color: #000000;
background-color: #ff0000\"";
// Fin du style

if($_POST['envoyer'] == "envoyer") {							// si une action est faite par l'utilisateur
	$envoi = true;
	$prenom = htmlentities($_POST['prenom'], ENT_NOQUOTES);		// chargement du nom + mise en forme de la variable
	$nom = htmlentities($_POST['nom'], ENT_NOQUOTES);			// chargement du nom + mise en forme de la variable
	$mail = htmlspecialchars($_POST['mail'], ENT_QUOTES);		// chargement du mail + mise en forme de la variable
	$tel = htmlspecialchars($_POST['tel'], ENT_QUOTES);			// chargement du tel + mise en forme de la variable
	$sujet = stripslashes($_POST['sujet']);						// chargement du sujet + mise en forme de la variable
	$message = stripslashes($_POST['msg']);						// chargement du message + mise en forme de la variable
} else {
	$envoi = false;
}

function verif_null($var){ // fonction qui verifie si le champs est vide
	if($var!=""){
		return $var;
	}
}

function verif_mail($var) // fonction qui verifie si le mail est correct et si le champs est vide
{
	$code_syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#'; // chargement de la syntaxe mail valide
	if(preg_match($code_syntaxe,$var)){ // compare la syntaxe mail valide au mail saisi
		return $var;
	}
}

function verif_tel($var) // fonction qui verifie si le n° de tel est correct
{
	$code_syntaxe='#^[0-9]{9,10}$#'; 	// chargement de la syntaxe tel valide
	if(preg_match($code_syntaxe,$var)){ // compare la syntaxe tel valide au tel saisie
		return $var;
	}
}

function envoi_mail($webmaster,$prenom,$nom,$mail,$sujet,$tel,$message,$startpage){ //fonction qui envoie le mail
	$contenu_message =  "   Prénom : ".$prenom."\n";
	$contenu_message .= "      Nom : ".$nom."\n";
	$contenu_message .= "     Mail : ".$mail."\n";
	$contenu_message .= "    Sujet : ".$sujet."\n";
	$contenu_message .= "Telephone : ".$tel."\n";
	$contenu_message .= "  Message : ".$message;
	$entete = "From: ".$nom." <".$mail.">"."\r\n";
	$entete .= 'Reply-To: '.$mail."\r\n"; 					//adresse email pour l'adresse de retour
	$entete .= 'To: '.$webmaster."\r\n";
	$entete .= "Content-Type: text/plain; charset=\"utf-8\"\r\n";
	$entete .= "Content-Transfer-Encoding:8bit\r\n";
	mail($webmaster,$sujet,$contenu_message,$entete);
	echo "<font color=\"red\"  size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\" ><strong><center><br>Votre message a bien été envoyé. Merci</center></strong></font><br>"; // Le mail est envoyé
	echo ("<p>&nbsp;</p><p>&nbsp;</p><p align=\"center\"><A HREF=\"index.php\"><strong>Retour à l'accueil</strong></a></p>");
	die ();
}

function verif_form($webmaster,$prenom,$nom,$mail,$sujet,$tel,$message){ 	//fonction qui verifie si le formulaire est pret a etre envoyer
	if (verif_mail($mail) || verif_tel($tel)) { 					// verifie si  les fontions sont a true
		$alerte = false;
		envoi_mail($webmaster,$prenom,$nom,$mail,$sujet,$tel,$message,$startpage);
	} else {
		$alerte = true;
		echo "<font color=\"red\" size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\" ><strong><center>Afin de vous recontacter, veuillez SVP compléter les champs obligatoires !</center></strong></font><br>"; // Une erreur dans le formulaire
		echo "<font color=\"red\" size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\" ><strong><center>(au moins une adresse mail valide ou un numéro de téléphone)</center></strong></font><br>"; // Une erreur dans le formulaire
	}
}

?>


		<!-- main container -->
		<div class="container">
			<div class="row">
				<div class="col-sm-8">
					<center>
						<h2 class="form-signin-heading">Contactez-nous !</h2>
						<?php
							if ($envoi){ // verifie si l'utilisateur a fait l'action d'envoyer
								verif_form($webmaster,$prenom,$nom,$mail,$sujet,$tel,$message);
							} else {
								echo "<h5 class=\"form-signin-heading\">Vous pouvez nous contacter en laissant un message ci-dessous</h5>";
							}
						?>
					</center>
				</div>
				<div class="col-sm-6">
					<form class="form-signin" role="form" method="post">
						<p> <input type="text"		name="prenom"	class="form-control" placeholder="Prénom" 			value="<?php if ($envoi) {echo $prenom;} ?>"></p>
						<p> <input type="text"		name="nom"		class="form-control" placeholder="Nom ou pseudo"	value="<?php if ($envoi) {echo $nom;} ?>"></p>
						<p> <input type="email"		name="mail"		class="form-control" placeholder="Adresse mail (*)" required <?php if($envoi) {if (verif_mail($mail)) {echo $style_input_blanc;} else {echo $style_input_rouge;echo autofocus;}} ?> value="<?php if ($envoi) {echo $mail;} ?>"></p>
						<p> <input type="text"		name="tel"		class="form-control" placeholder="Téléphone"		value="<?php if ($envoi) {echo $tel;} ?>"></p>
						<p> <input type="text"		name="sujet"	class="form-control" placeholder="Sujet"			value="<?php if ($envoi) {echo $sujet;} ?>"></p>
						<p> <textarea class="form-control" name="msg" style="width: 500px; height: 200px;" placeholder="Message (*)" required><?php if(isset($envoi)){ echo $message;} ?></textarea></p>
						<p> <button class="btn btn-lg btn-primary btn-block" type="submit" name="envoyer"				value="envoyer">Envoyer</button></p>
						<script src="./js/placeholders.min.js"></script>
					</form>
				</div>
			</div>
			
			<br />
			
			<?php include ("footer.php")?>

		</div><!--/.container-->

		<!-- add javascripts -->
		<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
		<script src="js/bootstrap.min.js"></script>
	</body>
</html>

J'en ai essayé d'autres, comme tous les exemples qu'on trouve sur le net.
Chez n'importe quel fournisseur ? j'ai pas des comptes partout, je ne sais pas dire.
Modérateur
Bonjour,

J'ai moi-même de vieux hébergement chez Free et je peut te confirmer que l'envoie de mail fonctionne, je viens de vérifier.
Quelques précautions à prendre ou à savoir:
* de mémoire c'était maxi 2000mails/mois , mais cela peut-être moins aujourd'hui.
* pas d'envoi groupé ou nombreux en un temps court, sinon bloqué.
* pour que le courriel ne soit pas directement bloqué comme spam par ta boite mail(ton serveur mail), il est préférable de garder le champs expéditeur comme étant celui de ton hébergement, ou au moins une adresse en free.fr. (=>ne pas utiliser l'adresse mail que le visiteur donne comme expéditeur, mais l'ajouter en texte au message).
* Mettre l'adresse de l’expéditeur dans tes contacts et/ou l'identifier comme légitime.

- C'est un serveur mutualisé et gratuit et pas de soucis tant que tu as peu de visiteurs/accès au site, si ton site commence à avoir de nombreuses visites, ou des scripts qui sollicite un peu trop le serveur, et l’écriture sur disques, ça coince vite, certains site sont tout simplement bloqués par free. (si un site est bloqué, à partir de ton compte tu ne pourras plus en activé d'autre avec la création de nouvelle adresse, si tu en as déjà d'autre à partir du même compte/abonnement, le risque de les voir bloqués augmente si codé de la même manière).


* Si possible, ajouter un capcha au formulaire pour réduire le risque d'en faire une cible pour robot spammeur avec l'effet de trop solliciter l'envoi de mail depuis ton site, mails qui seront probablement filtré ou bloqué sans que tu en ai connaissance mais qui peuvent te valoir de rendre ta fonction mail() inopérable ou bloqué au mieux temporairement.

Enfin, Free tourne avec une version PHP 5.6 et en plus bridée, il est peut-être temps de tourner vers un autre hébergeur si ton site nécessite PHP .

Cdt
Modifié par gcyrillus (21 Jun 2023 - 16:00)
Hello,
Merci @gcyrilllus, oui j'ai bien lu les conditions chez Free, c'est la seule réponse qu'on trouve sur le net.
Mais je suis en train d'écrire le site, donc je suis seul à l'utiliser et je m'envoie UN mail pour vérifier si ça marche. Je suis en php 5.6

Par contre, je viens de m'apercevoir d'un truc très bizarre ;
J'ai un autre compte chez sfr, j'ai donc mis dans le nom de l'expéditeur (dans le form) cette adresse sfr et là, j'ai reçu le mail instantanément. Si je mets une autre adresse chez Free, je reçois pas... C'est nouveau, ça ne le faisait pas avant.
Et encore une fois, avec une appli sur PC, j'arrive à m'envoyer un mail avec les adresses que j'utilise
Modifié par windo (21 Jun 2023 - 16:05)
Rectification :
je viens de refaire le test, avec adresse différente : no success !
j'essaie une 3ème fois : reçu !
Modifié par windo (21 Jun 2023 - 16:09)
Modérateur
Perso, il y a longtemps que je considère l'envoi de mail depuis Free aléatoire, peu fiable.
J'ai rapidement pris l'option de faire une copie locale du mail au cas très probable qu'il ne parte pas, il faut alors ne pas oublier de vérifier régulièrement ces copies.

Autre solution, se servir d'un autre hébergeur ou service de mail . Si tu disposes d'autre hébergement avec un système de mail fiable, tu peut proposer le contact depuis une page de cet autre site. C'est ce que je fais depuis l'un de mes sites Free qui est très peu fréquenter et ce juste par politesse pour le curieux qui tomberais dessus Smiley smile .

Cdt
Bonjour Windo,
Je sais que ce post est un peu vieux, mais peut-être qu'il n'es pas mort !
J'ai aussi des problèmes insolubles avec l'envoi d'un mail par PhP.
J'ai posté sur le même forum, PhP et smtp le 10 01 de cette année !
As-tu trouvé une solution ?
Mo envoie de mail ressemble au tien, de zéro à quatre messages par jour ! Toujours du même expéditeur et au même destinataire.
Rien donc d'envois en masse de spams !
Merci d'une réponse si possible.
Avec mes salutations
H.