Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2565 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Envoi de mail en parallele via ajax ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Envoi de mail en parallele via ajax ?

n°2022660
ksss
Posté le 13-09-2010 à 15:25:25  profilanswer
 

Bonjour à tous,
 
Je bute sur un point. Je crée pour mon site un système de news letter à laquelle tout le monde peut s'inscrire.  
A chaque fois que l'administrateur entre un message, je souhaite envoyer à tous les abonnés une lettre les avertissant du message.  
Les message de l'administrateur sont postés par un script php via AJAX qui retourne une chaine de caractère  l'avertissant de la réussite ou non de l'opération.  
Le pseudo code de se scritp php est le suivant:

Code :
  1. 1-vérifier les données entrées par l'admin
  2. 2-ajouter le message à la bdd
  3. 3-récupérer les mails des abonnés
  4. 4-envoyer à chaque mail la news letter
  5. 5-avertir l'admin du succès de l'opération (message posté avec succès)
  6. 1-2-3-4bis si erreur, avertir l'admin de l'échec puis exit.


 
Je souhaite que l'envoi des mails soit transparent pour l'administrateur or voilà ce qui se passe:
 
1- si un problème d'envoi à lieu, la chaine de caractère de retour du script comporte l'erreur SMTP et est affichée à l'admin. Il est courant que des abonnés changent d'adresse après un certain temps et que celle-ci reste dans la bdd. Comment contourner cette situation et faire en sorte que le script continue après une erreur SMTP ?
 
2-Le temps pris par l'envoi des mails est très long et le message de réussite n'est affiché qu'une fois tous les envois effectués (il peut-y en avoir beaucoup!). est-il possible d'afficher le message après l'étape 2 du pseudo code et laisser le script continuer coté serveur et ainsi gagner en temps d'exécution du point de vue de l'administrateur ?
 
Je suis ouvert sur le type de solution quitte à changer la structure du code.
 
Merci
 :jap:


Message édité par ksss le 13-09-2010 à 15:28:53
mood
Publicité
Posté le 13-09-2010 à 15:25:25  profilanswer
 

n°2022698
rufo
Pas me confondre avec Lycos!
Posté le 13-09-2010 à 17:09:07  profilanswer
 

C'est ton FAI ou hébergeur qui va être content d'un envoi en masse de mail si c'est pas prévu dans le contrat :/
A mon avis, tu devrais découper ton script en plusieurs scripts et les faire exécuter périodiquement par le cron sur des portions de tes données (surtout pour l'envoi des mails).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2022704
ksss
Posté le 13-09-2010 à 17:22:12  profilanswer
 

Salut,
 
Merci pour ta réponse. Tu pourrais juste développer un peu ? Cron (que je ne connais pas encore) en admettant que je sois hébergé sur serveur linux, ce qui n'est pas encore dit (le site est hors ligne pour l'instant).  
Mais de manière général, comment font les sites avec news letter ? ce qui est assez courant mine de rien; doit bien y avoir une façon de faire éprouvée...
 
Dans tous les cas, je sens bien que ma méthode n'est pas terrible  :sweat:.

n°2022708
rufo
Pas me confondre avec Lycos!
Posté le 13-09-2010 à 17:40:10  profilanswer
 

Ils passent soit un contrat particulier avec leur hébergeur pour faire du mailing, soit par un prestataire spécialisé dans le mailing.
 
Sous Windows, l'équivalent de cron, c'est le planificateur de tâches.
 
Côté algo :  
1 et 2 dans un script (quoique je ne sais pas ce qu'implique ces 2 actions)
3-4-5 dans un autre qui travaille sur qq adresses mail seulement (10 par ex).
 
Les 2 scripts sont exécutés périodiquement (dépend de combien de mail t'as le droit d'envoyer d'un coup ou par minute)...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2022734
czh
Posté le 13-09-2010 à 21:48:45  profilanswer
 

Pour le script PHP envoiemails.php, un truc du genre :

Code :
  1. <script type="text/javascript">
  2. document.addEventListener('load', function () {
  3.   document.location = './envoiemails.php?toto=<?=time(); ?>';
  4. }, false);
  5. </script>
  6. <?php
  7. ob_flush();
  8. flush();
  9. $mails = iterateur_de_mail_non_envoyes_qui_vient_de_la_bdd_ou session_ou_autrepart();
  10. if (terminer($mails)) {
  11.   die('j\'ai fini de bosser, je vais me faire un café');
  12. }
  13. foreach ($mails as $mail) {
  14.   envoyer_mail($mail);
  15.   marquer_ce_mail_comme_envoye_ds_la_bdd_session_ou_autre_part($mail);
  16. }


 
Bon après, je sais pas si les events javascript sont appelés si la page plante.
 
Au niveau de la boucle ajax :  

Code :
  1. var envoyermails = function () {
  2.   requeteajax('envoiemails.php', {
  3.     onComplete: function (xhr) {
  4.       if (!xhr.responseText.match(/fini de bosser/)) {
  5.         envoyermails();
  6.       } else {
  7.         alert('apparemment envoiemails.php a fini de taffer');
  8.       }
  9.     }
  10.   });
  11. }


 
La partie addEventListener du script php est inutile quand utilisé avec la boucle Ajax.


Message édité par czh le 13-09-2010 à 22:25:51
n°2022772
ksss
Posté le 14-09-2010 à 09:55:18  profilanswer
 

Salut,
 
Merci, jvais essayer de mettre ça en pratique. Mais comme tu dis, si la page plante ou que l'utilisateur change de page tout court, je pense que ça interrompt l'envoi nan?

n°2024335
czh
Posté le 22-09-2010 à 01:28:04  profilanswer
 

ksss a écrit :

page plante


 
Cela concerne essentiellement le premier script.
Il faut tester pour savoir, ça dépend :
- du code HTTP retourné par Apache lors d'un fatal error de script PHP
- du comportement du navigateur face à ce code HTTP et son influence sur les évènements DOM du chargement d'un page.
 
Le 2ème script étant une ébauche d'une requête Ajax, les plantages de page sont à gérer au niveau de la couche Ajax (XHR).
 

ksss a écrit :

l'utilisateur change de page tout court, je pense que ça interrompt l'envoi nan?


 
Il s'agit d'un autre problème. Un script PHP peut continuer de s'exécuter après une déconnexion du navigateur sous certaines conditions :
- http://php.net/manual/fr/features. [...] ndling.php
- http://www.php.net/manual/fr/funct [...] -abort.php
- http://www.php.net/manual/fr/funct [...] -limit.php
 
Dans ce cas on peut imaginer une sorte d'appel récursif de la page PHP qui s'auto-appelle pour tolérer les fatal errors.
 

Code :
  1. ignore_user_abort(true); // ignore la déconnexion
  2. set_time_limit(0); // temps illimité
  3. if (@$_REQUEST['selfcall'] == 1) {
  4.   // faire des trucs qui sont susceptibles de planter
  5.   // fatal errors etc.
  6. } else {
  7.   file_get_content("http://$_SERVER[SERVER_NAME]/$_SERVER[REQUEST_URI]?selfcall=1" ); // ou composer une url correct selon les besoins
  8. }


 
Ici, l'intérêt de l'Ajax est limité puisqu'on n'en a plus besoin, et pour suivre la tâche en arrière-plan c'est un peu plus compliqué.


Message édité par czh le 22-09-2010 à 01:29:39

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Envoi de mail en parallele via ajax ?

 

Sujets relatifs
Ajax - Changement contenu celluleBloquer et rediriger un appel de page ajax
[VB Outlook] Changer de compte de messagerie au moment de l'envoiJavascript / Ajax - Remplacer une image par une autre
Question de débutant en AjaxProblème pour joindre plusieurs fichiers à un mail
Vote / Satisfaction et envoi par email[Resolu] Problème formulaire envoi mail
Envoyer un mail via Excel 
Plus de sujets relatifs à : Envoi de mail en parallele via ajax ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR