8795 sujets

Développement web côté serveur, CMS

Bonjour j'ai créer un petit script avec la fonction mail et donc en faite quand j'essaye d'envoyer personne ne reçoit rien j'aurai voulu savoir si mon code était bon ? Merci pour votre soutien.

<?php

if (isset($_POST["action"]) && $_POST["action"] == "send")
{
	$priorite = postInput($_POST["priorite"]);
	$titre = postInput($_POST["titre"]);
	$newsletter = $_POST["newsletter"];

	if ($titre == "")
	{
		$_GET["msg"] = "Veuillez introduire le titre.";
	}
	else
	{
		if ($newsletter == "")
		{
			$_GET["msg"] = "Veuillez introduire le message.";
		}
		else
		{

			$frontiere = '-----=' . md5(uniqid(mt_rand())); 
			
			$headers = "From: ".(NAME_SERVER)." <".(EMAIL_ADMIN).">\n";
			$headers .= "Disposition-Notification-To: ".EMAIL_ADMIN."\n"; 
			$headers .= "MIME-Version: 1.0\n"; 
			$headers .= "Content-Type: multipart/mixed; boundary=\"".$frontiere."\"";
			$headers .= "X-Priority: ".$priorite."\n";
			
			$msg = "This is a multi-part message in MIME format.\n\n"; 
			
			$msg .= "--".$frontiere."\n"; 
			$msg .= "Content-Type: text/html; charset=\"iso-8859-1\"\n"; 
			$msg .= "Content-Transfer-Encoding: 8bit\n\n"; 
			$msg .= $newsletter."\n\n";
				
			$msg .= "--".$frontiere."--\n";
				
			// -- On recherche la liste des comptes joueurs
			mysql_connect(MYSQL_HOTE_REALMD, MYSQL_USER_REALMD, MYSQL_PASSWORD_REALMD) or die('Connexion impossible: ' . mysql_error());
			mysql_select_db(MYSQL_BDD_REALMD) or die('Impossible de séléctioner cette DB: ' . mysql_error());
	
			$r = mysql_query("select email FROM `account`") or die(mysql_error());

			$erreur = 0;//déclare cette fonction en dehors de ta boucle
			
			while ($ligne = mysql_fetch_array($r))
			{
				$email = $ligne["email"];

				if(!mail($email,$titre,$msg,$headers)){
					$erreur++;
				}

			}
			
			if($erreur){
				header("location: newsletter.php?msgok=".urlencode('Votre newsletter n\'a pas été envoyé à ' . $erreur . ' membres'));
			}
			else{
				header("location: newsletter.php?msgok=".urlencode('Votre newsletter a bien été envoyé a tout les joueurs.'));
			}

		}
	}
}

include ("includes/header.php");
include ("includes/menu.php");

?>


<h2>Envoyer une newsletter</h2>
	<p>
		<form method="post" action="newsletter.php" class="formbbcode">
		<input type="hidden" name="action" value="send" />
		<table class="tbl" border="0" cellpadding="5" cellspacing="0" width="100%">
			<tr>
				<td class="tdh1">Priorité :</td>
				<td class="tdh1">
					<select name="priorite" id="priorite">
						<option value="1">Bas</option>
						<option value="3">Moyen</option>
						<option value="5">Haut</option>
					</select>
				</td>
			</tr>
			<tr>
				<td class="tdh1">Titre du message :</td>
				<td class="tdh1"><input type="text" size="50" name="titre" id="titre" class="inputbox" /></td>
			</tr>
			<tr>
				<td class="tdh1">Message :</td>
				<td class="tdh1"><textarea class="textareaboxform" name="newsletter" cols="60" rows="10" id="newsletter"></textarea></td>
			</tr>
			<tr>
				<td class="tdh1"></td>
				<td class="tdh1"><input type="submit" name="button" id="button" value="Envoyer" class="valider" /></td>
			</tr>
		</table>
		</form>
		<br /><br />
	</p>
</div>


<div id="footer"></div>
</body>
</html>

Modifié par subzeros (03 Aug 2010 - 19:57)
Salut,

je ne vois rien qui cloche spécialement en partant du principe que tu as vérifié le contenu de tes constantes (juste un peu surpris par le 8bit mais bof).

Quelques remarques tout de même :

* il existe des classes prêtes à l'emploi et très efficaces comme phpmailer qui simplifient la vie et rendent le code plus clair.

* tu pourrais remplacer
if (isset($_POST["action"]) && $_POST["action"] == "send")
par
if($_SERVER['REQUEST_METHOD']=='POST')
* ce serait sympa de ré-alimenter les champs déjà saisis en cas de réaffichage du formulaire (htmlspecialchars).

* ce serait mieux de faire une redirection vers une autre page une fois les mails envoyés pour éviter un F5 malheureux et l'envoi en double de la newsletter.

* je ne vois pas trop l'intérêt d'un tableau plutôt que des CSS (sans parler des attributs obsolètes de mise en forme comme cellpadding).

* il est préconisé d'utiliser des éléments LABEL (cf. http://openweb.eu.org/articles/formulaire_accessible ).