Newsletter qui plante sous free

WRInaute passionné
Bonjour
J'ai un petit soucis d'envoi d'une news vis a vis d'un petit annuaire hébergé sous free.
Si j'envoie cette news à une cinquantaine de personnes, celle ci passe bien par contre si je veux l'envoyer à près de 1000 personnes sa plante.
Voici le message:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Apache/ProXad [May 15 2007 17:32:33] Server at ****.free.fr Port 80
J'en deduis qu'il faut que le script est un temp d'attente toute les 50 envoies (grosso modo) mais je seche.
Voici donc le code pour qui souhaiterais mettre son nez dedans:
Code:
<?php
//page d'accueil de l'administration de l'annuaire
include("../data_bd_annuaire.php"); //variables de l'annuaire
include("../functions.php"); //fonctions de l'annuaire
include("secure.php"); //verification de la session + connexion a la BD

// si on a pas quitte dans secure.php, on peut continuer...


//creation de le requete pour trouver l'adresse email de l'admin 
$sql2 = "SELECT email_master FROM $T_infos ";
//envoi de la requete
$res2 = send_sql($sql2,"trouver les paramètres de l'annuaire");

$resultat2 = mysql_fetch_array($res2,MYSQL_ASSOC);


$titre = $_POST['titre'];
$message = $_POST['message'];
$choix = $_POST['choix'];
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Envoyer une NewsLetter</title>
<style type="text/css">
<!--
.Style1 {color: #A9D8F6}
-->
</style>
</head>

<body style="background-color:#A9D8F6;">
	<a href="<?php echo addsess2url("admin.php",$session_id); ?>">Retour à l'accueil de l'administration</a>
<br>
<h1 style="text-align:center;">Envoyer un mail</h1>
<center>
<form name="form1" method="post" action="">
<?php
//Si les champs ont bien été remplis
if(!empty($titre) && !empty($message) && !empty($choix))
{

	$message = nl2br(htmlentities($message));
	$message = stripslashes($message);
	
	$titre = htmlentities($titre);
	$titre = stripslashes($titre);
	$choix = htmlentities($choix);

	$email_admin = $resultat2['email_master'];
	$entete = "MIME-Version: 1.0\r\n";
	$entete .= "Content-type: text/html; charset=iso-8859-1\r\n";
	$entete .= "From: <$email_admin>\r\n";
	$entete .= "Reply-To: $email_admin\r\n";
	$i = 0;
	$d = 0;
	$doublons = array();

	if($choix == 1)
	{
		//creation de la requete pour trouver les e-mails des sites
		$sql1 = "SELECT * FROM $T_sites";
		//envoi de la requete
		$res1 = send_sql($sql1,"trouver le nombre de sites valides!");
		//fin de la connexion
		mysql_close($lk);
	}
	elseif($choix == 2)
	{
		//creation de la requete pour trouver les e-mails des sites
		$sql1 = "SELECT * FROM $T_sites_in_wait";
		//envoi de la requete
		$res1 = send_sql($sql1,"trouver le nombre de sites en attente !");
		//fin de la connexion
		mysql_close($lk);
	}
	elseif($choix == 3)
	{
		//creation de la requete pour trouver les e-mails des sites
		$sql1 = "SELECT * FROM $T_sites";
		$sql3 = "SELECT * FROM $T_sites_in_wait";
		//envoi de la requete
		$res1 = send_sql($sql1,"trouver le nombre de sites valides!");
		$res3 = send_sql($sql3,"trouver le nombre de sites en attente!");
		//fin de la connexion
		mysql_close($lk);
		echo '<br>Sites en attente :<br>';
		//On envoie d'abord les message au sites en attente
		while ($resultat3 = mysql_fetch_array($res3,MYSQL_ASSOC))
		{
			$nom_site = $resultat3['titre'];
			$mail = $resultat3['email_proprio'];
			$doublons[$d] = $mail;	
			
			if(preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!", $mail))
			{
				if(!array_key_exists($mail, $doublons))
				{	
					mail($mail,$titre, str_replace('[nomsite]', '' .$nom_site. '', $message) ,$entete);			
					echo 'Envoyé à ' . $mail . '<br />';
					$i++;
				}
				else
				{
					echo 'Un mail é déjà été envoyé à l\'adresse : ' .$mail. '<br />';
				}
			}
			else //S'il y à un probleme avec l'email
			{
				echo '<font color="#FF0000">Impossible d\'envoyer à ' .$mail. ' !</font><br />';
			}
			
			$d++;
			
		}	
		echo '<br />Sites validés :<br />';
	}

	//Ensuite on envoie les messages
	while ($resultat = mysql_fetch_array($res1,MYSQL_ASSOC))
	{
		$nom_site = $resultat['titre'];	
		$mail = $resultat['email_proprio'];	
		$doublons[$d] = $mail;
		
		if(preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!", $mail))
		{
			if(!array_key_exists($mail, $doublons))
			{		
				mail($mail,$titre, str_replace('[nomsite]', '' .$nom_site. '', $message) ,$entete);
				echo 'Envoyé à ' . $mail . '<br />';
				$i++;
			}
			else
			{
				echo 'Un mail é déjà été envoyé à l\'adresse : ' .$mail. '<br />';
			}
		}
		else //S'il y à un probleme avec l'email
		{
			echo '<font color="#FF0000">Impossible d\'envoyer à ' .$mail. ' !</font><br />';
		}
		
		$d++;
	}
	echo '<br />Le message a été envoyé ' .$i. ' personne(s) !<br />';
}
elseif(isset($titre) || isset($message)) //Si titres et messages existent mais sont vides
{
	echo 'Un des champs titre ou message n\'est pas complete !<br /><br />';
}
else
{
	echo 'Veuillez completer tous les champs et selectionner un groupe de site.<br /><br />';
}
?>
<br>
Titre de la NewsLetter :<br>
  <p>
    <input type="text" name="titre">
</p>
  <p>Votre email : <font style="color:#0099FF;"><?php echo $resultat2['email_master']; ?></font> (Pour la changer rendez-vous dans l'<a href="<?php echo addsess2url("param_annuaire.php",$session_id); ?>">administration générale</a> de l'annuaire)</p>
  <p>Message :<br />
  Pour afficher le nom du site de la personne qui recevra le mail , ajoutez la balise [nomsite] (avec les crochets) dans le message.</p>
  <p>
    <textarea name="message" cols="100" rows="15">

</textarea> 
  </p>
  <p>Envoyer aux :<br />
    <input type="radio" name="choix" value="1">
    sites d&eacute;j&agrave; valid&eacute;s<br>
    <input type="radio" name="choix" value="2">
    sites en attente<br>
    <input type="radio" name="choix" value="3">
	les deux
  </p>
  <p>
    <input type="submit" name="Submit" value="Envoyer">
    <br />
  </p>
</form> 
<br />
</center>
</body>
</html>
Merci d'avance
 
WRInaute accro
ca va rien changé, ton script plante car tu ne peux depasser 30 secondes. C'est tout le script qui est mal fait. il faut utiliser BCC (Blind carbon copy ou Copie carbone invisible en fr dans le texte) pour du masse mailing. Envoyer 50 mails avec 100 copies cachés dans chacun et laissez le serveur se depatouiller..
 
WRInaute passionné
Merci KOogar
Bon, j'ai rien comprit et je vais chercher à quoi sa correspond pour mon modeste niveau :) .
Je pensais que mettre une sorte de 'time out' aurrait été suffisant !
Sinon et pour info, ce meme script avec un ndd fonctionne très bien.
 
WRInaute accro
tryan a dit:
Sinon et pour info, ce meme script avec un ndd fonctionne très bien.

Ce script n'est pas nouveau puiqu'il s'agit de celui de MyPHPAnnuaire. Non désolé, ya mieux... Pour cette histoire de timing, c'est pas adaptable a ton script, d'ailleurs ce truc de timming, c'est adaptable nul part et ca ne veux rien dire.

Si tu veux relancer un script, regarde plutot dans les taches CRON et il faut adpaté le script pour pas qu'il reprenne les meme enregistrement a chaque passage.

A free!!, n'est pas la pour rendre MyPHPAnnuaire plus simple a l'emploi. Tu ne peux pas demenager ton site sur un hebergement classique, comme il est souvent conseillé sur ce forum? quitter free, sniff!!
 
WRInaute passionné
KOogar a dit:
A free!!, n'est pas la pour rendre MyPHPAnnuaire plus simple a l'emploi. Tu ne peux pas demenager ton site sur un hebergement classique, comme il est souvent conseillé sur ce forum? quitter free, sniff!!

En faite c'est un "dérivé" de MyPHPAnnuaire adapté pour les sans nom de domaine qui "simule l'url rewriting".J'etais testeur et depuis je l'ai gardé ^^.
Bon la sa depasse largement mes maigres compétences alors je ferais sans.
Merci KOogar de t'etre attardé sur ce poste :) .
 
Discussions similaires
Haut