Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074

    Gestione newsletter via CronTab

    Ho sviluppato un sistema di gestione per una newsletter; il sistema profila ogni singolo utente (verifica che tipo di news vuole ricevere), prepara la relativa lista di news/link, quindi la invia.
    Al momento, gestisco la cosa direttamente: alla scadenza (settimanale), lancio una pagina apposita, e la lascio aperta in background nel browser. La pagina invia la mail a 300 indirizzi per volta, quindi si ricarica dopo 10 secondi e ricomincia il ciclo. Raggiunto il limite, smette di inviare/ricaricarsi.
    Funziona tutto perfettamente, però rimane la necessità che sia io a lanciare la pagina, che deve comunque restare aperta nel browser per tutto il tempo necessario - il che, trattandosi di quasi 40.000 indirizzi, significa oltre due ore...
    Ho pensato quindi di utlizzare CronTab.
    Le domande che mi pongo sono due:
    Il mio pannello di controllo (Plaex-Unix) mi da la possibilità di gestire CronTab, e per quanto riguarda i parametri temporali è tutto molto semplice e chiaro. Però, ho provato a fare un semplice test di funzionamento, utilizzando un file .PHP che mi invia una mail di controllo. Nella riga di comando, quindi, ho scritto una cosa tipo:
    ma non ha funzionato per niente...
    Allora, come devo scrivere la riga di comando? Devo anteporre wget? O che?
    Secondo problema.
    Il sistema che ho sviluppato adesso, si basa sul fatto che:
    - la pagina con lo script viene aperta in un browser, perchè per inviare la newsletter a blocchi di indirizzi si ricarica ogni 10 secondi
    - ad ogni reload, controlla che il numero totale dei messaggi inviati non sia superiore al numero degli indirizzi, nel qual caso smette di ricaricarsi/inviare messaggi
    Ma se richiamo lo script via CronTab, quindi senza aprirlo in un browser, come posso ottenere il medesimo risultato - evitando che looppi all'infinito, anche senza inviare messaggi perchè gli indirizzi sono terminati?
    Thanx_in_advance...
    metatad
    graphic & web design

  2. #2
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ciao,
    per la prima domanda non so come aiutarti non ho mai usato quel pannello di controllo. Prova a guardare sulla documentazione che di sicuro esiste da qualche parte.
    Per la seconda richiesta, a parte il fatto che hai ripetuto tutto quello che avevi già scritto, l'unica cosa che posso consigliarti è lasciare su database una traccia che ti dica a chi è stata inviata la newsletter, una tabella che metta in relazione l'id della newsletter con l'id utente.

    Il file di invio lo puoi strutturare in diverse maniere, ad esempio puoi fare che ogni volta che viene richiamato, si andrà a controllare l'ultimo utente a cui è stata inviata la newsletter, e partirà da quel punto per inviare le altre 300 email. Quando, in una ennesima chiamata da parte del cron, ricaverà che l'ultimo utente a cui è stata inviata la newsletter ( che in qualche modo gli devi specificare ) è proprio l'ultimo utente disponibile, fa che saltare il ciclo di invio.

    Fammi sapere.
    Ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    1,611
    io ti consiglierei di inviare meno email di quante ne invii per volta...

    300 email sono tante, prima o poi rischi di finire nelle black list.

    quindi il mio consiglio è....
    utilizza le funzioni cron da php e invia ciclicamente dalle 20 alle 50 email per volta, e grazie alle funzioni cron appunto, lascia che php faccia tutto il resto anche chiudendo il browser, magari impiegando anche diverse ore.

    ATTENZIONE.... non provare subito online, assicurati che il ciclo termini e poi passa tutto online, fai tante prove in locale prima, i cronjon se mal programmati diventano un grosso problemi fermarli, ANCHE CANCELLANDO LA PAGINA, a me è capitato ad esempio, di dover per forza riavviare apache, e se il sito è su un server condiviso so ca.....
    NON ABBANDONATE CANI O GATTI!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Grazie per i consigli ed i suggerimenti.
    Mi rimane un dubbio, comunque.
    Se con CronTab richiamoil mio file PHP - ad es. - una volta alla settimana, la difficoltà non sta nel fargli esaurire il ciclo, una volta inviate tutte le email, quanto piuttosto nel farlo funzionare senza caricarlo in un browser.
    Infatti, per come l'ho sviluppato adesso, il meccanismo funziona più o meno così:
    - il file viene richiamato
    - server-side, seleziona il primo blocco di utenti (da 0 a n), profila le email, quindi le invia, e passa come variabile la quantità di email inviate (n);
    - client-side, aspetta 10 secondi, quindi ricarica la pagina passando come variabile n;
    - server-side, riceve la variabile, seleziona il secondo blocco di utenti (da n a x - che sarà uguale a n + n), e quindi riparte il ciclo.
    Ma questa parte client-side, se non ho la pagina aperta in un browser, come la gestisco?
    É questo che non capisco...
    metatad
    graphic & web design

  5. #5
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    La parte client side non esiste.
    Il server chiama un file php ogni tot minuti e lo esegue.

  6. #6
    Originariamente inviato da metatad
    Grazie per i consigli ed i suggerimenti.
    Mi rimane un dubbio, comunque.
    Se con CronTab richiamoil mio file PHP - ad es. - una volta alla settimana, la difficoltà non sta nel fargli esaurire il ciclo, una volta inviate tutte le email, quanto piuttosto nel farlo funzionare senza caricarlo in un browser.
    Infatti, per come l'ho sviluppato adesso, il meccanismo funziona più o meno così:
    - il file viene richiamato
    - server-side, seleziona il primo blocco di utenti (da 0 a n), profila le email, quindi le invia, e passa come variabile la quantità di email inviate (n);
    - client-side, aspetta 10 secondi, quindi ricarica la pagina passando come variabile n;
    - server-side, riceve la variabile, seleziona il secondo blocco di utenti (da n a x - che sarà uguale a n + n), e quindi riparte il ciclo.
    Ma questa parte client-side, se non ho la pagina aperta in un browser, come la gestisco?
    É questo che non capisco...
    da cron fai partire lo script php con:
    -controllo esistenza variabile $_GET["n"]
    no: parte da capo, inviando le mail da 0 a numero (definito da te) poi si ricarica con un header location, passando come parametro il numero di mail lette
    si: aspetti un tot di secondi e poi ciclo di mail da n a n+numero e cosi via....

    assicurati soltanto che lo script non superi i 30 secondi altrimenti puoi settare i secondi prima che vada in time out da ini_set


    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Hummm...
    scusate i mie dubbi / incomprensioni...

    x x Razorblade
    Come fa il file PHP ad essere richiamato ogni tot minuti/secondi? Se imposto il CronTab per eseguire questa operazione, non smetterà mai di richiamare il file, anche se poi questo non esegue alcuna azione (quando ha raggiunto il limite di invii).
    Giusto?

    x sonounostrinato
    Che intendi con:
    no: parte da capo, inviando le mail da 0 a numero (definito da te) poi si ricarica con un header location, passando come parametro il numero di mail lette
    ?
    Intendi che questa operazione non deve essere eseguita?
    E allora come fa a ciclare?
    Per farlo, io uso la stringa:
    Codice PHP:
    <meta http-equiv="refresh" content="25;URL=selfsender.php?end=<?PHP echo $next?>">
    assicurati soltanto che lo script non superi i 30 secondi altrimenti puoi settare i secondi prima che vada in time out da ini_set
    Ti riferisci al tempo impiegato per effettuare l'operazione di invio? Oppure al tempo di attesa?
    Comunque, attualmente, l'attesa è impostata su 25", mentre per effettuare l'invio di ogni singolo blocco (300 msg) impiega un tempo variabile, a volte anche superiore ai 30", anche se in genere inferiore, però non si è mai bloccato ...

    Mi sono un pò impantanato / imbranato...
    metatad
    graphic & web design

  8. #8
    lo script da come lo hai impostato va benissimo per essere eseguito via cron.
    l'unica cosa da modificare è
    codice:
    <meta http-equiv="refresh" content="25;URL=selfsender.php?end=<?PHP echo $next; ?>">
    perchè cron non è un browser e non la interpreta.

    devi cambiare il tuo script mettendoci un header location che punti alla stessa url che fai puntare il tuo meta tag. Per l'attesa gli fai fare un sleep di venticinque secondi

    il gioco è fatto!
    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    thanx!...
    metatad
    graphic & web design

  10. #10
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    eccomi , mi intrometto riportando in vita questo post , so che ne ho aperto uno da poco ma appena letto ho cqapito che quest era per me ...
    ora vi chiedo :

    devo fare una operazione identica io ho n utenti a cui mandare mail tramite main list .
    a me non interessa che il browser rimanga aperto (anche se più sicuro che giri senza lasciarlo aperto)
    mi trovo nel problema di come refreshare la pagina ogni n secondi facendoli valorizzare le 2 variabili per il limit.

    io passo le variabili tramite get e per fare le prove ho usato un link
    Codice PHP:
    $primo $primo + ($secondo);
            
    $secondo 5;
        echo 
    "<a href=\"form_invio.php?first=$primo&second=$secondo\" title=\"invio successivo\">successivo</a>";    } 
    ovviamente questo non dovrà esistere ma dovrà essere tutto automatizzato.

    ora

    codice:
    <meta http-equiv="refresh" content="25;URL=selfsender.php?end=<?PHP echo $next; ?>">
    questa stringa che si mette nei tag html ... io non ho tag html. quindi con un header
    codice:
    header ("Location:form_invio.php?first=$primo&second=$secondo");
    ora però come gli dico di refreshare ogni n secondi ?
    ho una funzione per questo ?


    grazie mille ... ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.