> Tous les forums > Forum des Webmasters
 Envoie mail smtp automatiqueSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Bean
  Posté le 07/02/2007 @ 19:38 
Aller en bas de la page 
Petit astucien

Bonsoir à toutes et à tous,

Voici ma question, je viens de faire un petit espace membre, avec une fonction d'envoie de messages privés.

Le truc c'est que quand je veux envoyer un message à tous les membres et que tous les membres recoivent un mail, ben ma fonction bloquent au bout de 30 sec. Voici le message :

Fatal error: Maximum execution time of 30 seconds exceeded in h:\weblocal\membre\mail_membre_ce.php on line 183

Voici mon code :

<?
$req = MYSQL_QUERY("SELECT * FROM gestion_membre WHERE ce='oui'");
$res = MYSQL_NUM_ROWS($req);

$i=0;
WHILE($i!=$res)
{
$mel = mysql_result($req,$i,"mel");
$nom = mysql_result($req,$i,"nom");
$prenom = mysql_result($req,$i,"prenom");

?>
<?
$headers = "From: "."mon mail";
$titre = "Message privé dans ton espace membre";

$corps_message = ("Bonjour $prenom $nom, \n\nTu viens de recevoir un mail de $expediteur, tu peux allez le consulter dans ton espace membre.");

$message = ($corps_message);
if(mail($mel,$titre,$message,$headers)){
?>
<?
$i++;
}
?>
<span class=info>Le mél est en cours d'envoie...</span>

<?php
}
}
?>

Le mail est envoyé mais au bout de 30 secondes il s'arrête. Comment faire pour ne pas avoir de Maximum execution time of 30 seconds exceeded et donc ralentir l'envoie. En faite faire faire une pause à chaque boucle de 1 seconde par exemple.

En fait c'est peut-être autre chose !!!

Alors si vous pouviez m'apporter vos avis, je vous en remercie d'avance.

Bean

Publicité
elle
 Posté le 07/02/2007 à 19:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grande Maîtresse astucienne

Un revenant!

Bean
 Posté le 07/02/2007 à 19:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Coucou Elle,

Et oui !!! Enfin j'étais jamais bien loin.... même si ma participation a été moindre depuis qq temps.

Mais j'ai trop de site !!!!!! lol

Alors que penses-tu de mon pb ?

elle
 Posté le 07/02/2007 à 19:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grande Maîtresse astucienne

Bean a écrit :

Alors que penses-tu de mon pb ?


Euh... pas grand chose.

PHP et moi, ça fait deux.

Malcolm
 Posté le 07/02/2007 à 20:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut :)

en fait la solution est aussi simple que compliquée ...

simple parce que le temps maximum d'exécution se modifie dans le fichier php.ini et est par défaut à 30 secondes. Compliquée parce qu'à part hé"berger Apache sur ton pc ou bien louer un serveur dédié, tu n'as pas accès au php.ini et tu ne peux donc pas modifier ceci ...

Solution : envoyer un mail à plusieurs adresses en caché, ce que j'ai utilisé dans la première version de mon script "NewsletTux" ou répéter récursivement l'envoi de mail ... De façon à déjouer l'exécution d'un thread en 30 secondes (ce que je suis en train de viser pour la version 2 ...)

EDIT : ton code est perfectible et allégeable, voici un aperçu perso d'un début d'optimisation (après, on pourrait ss doute faire encore mieux, mais ce serait capillotracté) :

<?php
$req = mysql_query("SELECT * FROM gestion_membre WHERE ce='oui'");

while($abonne = mysql_fetch_array($req))
{
$mel = $abonne['mel'];
$nom = $abonne['nom'];
$prenom = $abonne['prenom'];

$headers = "From: "."mon mail";
$titre = "Message privé dans ton espace membre";

$corps_message = ("Bonjour $prenom $nom, \n\nTu viens de recevoir un mail de $expediteur, tu peux aller le consulter dans ton espace membre.");

if(mail($mel,$titre,$corps_message,$headers))
{
echo "<span class=\"info\">Le mél est envoyé...</span>\n";
}
}
?>



Modifié par Malcolm le 07/02/2007 20:39
Bean
 Posté le 07/02/2007 à 21:04 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut Malcolm,

Heureux de te voir après ce long silence de ma part... désolé.

Que veux tu dire par : ?

ou répéter récursivement l'envoi de mail

Mais surtout comment faire cela ?


Bean
 Posté le 07/02/2007 à 21:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Re,

Comment fais-tu ?

envoyer un mail à plusieurs adresses en caché

Merci !!

Malcolm
 Posté le 07/02/2007 à 21:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

en gros, il s'agirait d'utiliser une page php qui fait 2 actions :

  1. l'envoi du mail
  2. l'appel à elle-même (principe-même de la récursivité ) sous une condition évidemment (pour éviter les boucles infinies)
et je suis encore en train d'étudier cela ...

Modifié par Malcolm le 07/02/2007 21:24
Bean
 Posté le 07/02/2007 à 21:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Je pense que j'ai trouvé !!!

  • Cc: : cet en-tête permet de spécifier les autres destinataires qui recevront le mail en Cc (Carbon copy), c'est à dire que tous les destinataires pourront voir à qui le message a été transmis.
    On l'utilise comme ceci : Cc: email1,email2,email3...
  • Bcc: : cet en-tête permet de spécifier les autres destinataires qui recevront le mail en Bcc (Blind carbon copy), c'est à dire que les destinataires ne pourront pas voir à qui le message a été transmis, il s'agit d'une copie cachée.
    On l'utilise comme ceci : Bcc: email1,email2,email3...
La source http://www.vulgarisation-informatique.com/mail.php



Modifié par Bean le 07/02/2007 21:28
Publicité
Bean
 Posté le 07/02/2007 à 21:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Malcolm je bloque sur l'envoie en Bcc.

Je n'arrive pas dans ma boucle a faire une liste de mes mel pour pouvoir les envoyer ensuite dans une 2ème partie dans la fonction mail.

<?
$req = MYSQL_QUERY("SELECT * FROM gestion_membre WHERE ce='oui'");
$res = MYSQL_NUM_ROWS($req);

$i=0;
WHILE($i!=$res)
{
$mel = mysql_result($req,$i,"mel");
$nom = mysql_result($req,$i,"nom");
$prenom = mysql_result($req,$i,"prenom");

?>

Ici une fonction pour faire mes mails dans une variable

<?
$i++;
}
?>


Et après j'envoie mon mail

<?
$headers = "From: "."snadgicgt24@free.fr";
$headers="Bcc: [mel=$mel]\n";
$titre = "Message privé dans ton espace membre";

$corps_message = ("Bonjour $prenom $nom, \n\nTu viens de recevoir un mail de $expediteur, tu peux allez le consulter dans ton espace membre.");

$message = ($corps_message);
if(mail($mel,$titre,$message,$headers)){
?>
<span class=info>Le mél est en cours d'envoie...</span>

Mais comment créer cette liste de mail ? je vois po :(


Malcolm
 Posté le 07/02/2007 à 23:02 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

si tu fais un mail personnalisé, ça risque de ne pas coller sur le contenu, vu que les gens auront tous le même ...

Autrement avec ma structure je testerais quelque chose ressemblant à ça :

<?php
/* ----- config ----- */
$nb_adresses_parmail = 10; // à changer selon les besoins
/* ----- fin config ----- */

$req = mysql_query("SELECT * FROM gestion_membre WHERE ce='oui'");
$array_abonnes = array(); $i = 0;
$emails_bcc = '';

while($abonne = mysql_fetch_array($req))
{
$array_abonnes[$i]['mel'] = $abonne['mel'];
$array_abonnes[$i]['nom'] = $abonne['nom'];
$array_abonnes[$i]['prenom'] = $abonne['prenom'];
$i++;
}

// puis on génère le mail, par passe de XXX adresses
$nb_passes = ceil(count($array_abonnes) / $nb_adresses_parmail);

for($a = 0; $a < $nb_passes; $a++)
{
// lecture des emails
for ($b = 0; $b < $nb_adresses_parmail; $b++)
{
$mails_bcc .= $array_abonnes[$a * $b]['mel'].";";
}

// On supprime le dernier point virgule
$mails_bcc .= '@@'; $mails_bcc = str_replace(';@@';'',$mails_bcc);
$headers = "From: "."mon mail";
$titre = "Message privé dans ton espace membre";

$corps_message = ("Bonjour $prenom $nom, \n\nTu viens de recevoir un mail de $expediteur, tu peux aller le consulter dans ton espace membre.");

if(mail($mel,$titre,$corps_message,$headers))
{
echo "<span class=\"info\">Le mél est envoyé...</span>\n";
}
} // fin de la passe
?>

bon, c'est à vue d'oeil, et je n'ai pas d'exemple pour tester sous la main ...

Malcolm
 Posté le 07/02/2007 à 23:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

j'ai oublié, mais évidemment tu modifies les headers en mettant les $mails_bcc ...
Bean
 Posté le 08/02/2007 à 10:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci Malcolm,

Trop fort ton script !!!!! Il marche au poil. Enfin j'espère que le mel est envoyé à tout le monde !!!!

De tout j'aurais des remontées sinon !!!!!

Pour la ligne manquante : $headers="Bcc: $mails_bcc\n";

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
45,99 €Boîtier PC ATX Fractal Focus G à 45,99 €
Valable jusqu'au 01 Mars

Amazon propose actuellement le très bon boîter moyen tour Fractal Design Focus G à 45,99 € livré gratuitement alors qu'on le trouve ailleurs à plus de 69 €. Le boitier Fractal Design Focus G est une plateforme ultra-polyvalente douée de fonctions ultra pratiques (format ATX, filtres, USB 3.0, 2 ventilateurs LED inclus, emplacements 5,25 pouces pour lecteur DVD/Blu-Ray, montage facile).


> Voir l'offre
139,99 €NAS QNAP TS-251+ 2 baies (quad core, 2 Go RAM) à 139,99 €
Valable jusqu'au 28 Février

Amazon propose actuellement le NAS QNAP TS-230 2 baies à 139,99 € livré gratuitement. On le trouve ailleurs à partir de 185 €. Ce NAS est parfait pour sauvegarder vos données. Vous pouvez accéder à distance à vos fichiers, et disposez même d'un cloud privé pour partager facilement vos documents avec vos proches. Grâce à ses 2 baies, vous pourrez étendre votre capacité de stockage ou bien sécuriser vos données en mettant en place un RAID.  Reposant sur un processeur quad-core Realtek 1.4 GHz et 2 Go de RAM, le TS-230 délivre de bonnes performances multitâches exceptionnelles (jusqu'à 113 Mo/s) et prend en charge le décodage matériel 4K (H.264) et le transcodage en temps réelCe NAS intègre en outre 2 ports USB 3.0 et deux ports Ethernet Gigabit et offre la possibilité d'un chiffrement matériel.


> Voir l'offre
79,99 €Souris sans fil avec trackball Logitech MX Ergo à 79,99 €
Valable jusqu'au 02 Mars

Amazon fait une belle promotion sur la souris sans fil avec trackball Logitech MX Ergo qui passe à 79,99 € livrée gratuitement. On la trouve ailleurs autour de 100 €. Réduisant de 20% la contrainte musculaire par rapport à une souris standard,  le Logitech MX Ergo vous facilitera le travail en maintenant dans une position très stable votre main.


> Voir l'offre

Sujets relatifs
envoie le lien d'article par mail
Reroutage d'écoute automatique+mail intégré
envoie mail php
Mail automatique dans PHP
envoi automatique d'e-mail
changer mon adresse mail
Bouton RSS automatique dans page annonce Google site
Rafraîchissement automatique d'une page web
Message mail lors d'une réponse à une question
Récupération d'image .. pour envois par mail
Plus de sujets relatifs à Envoie mail smtp automatique
 > Tous les forums > Forum Forum des Webmasters