Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Newsletter consigli pratici

    Buon giorno a tutti,

    mi trovo a dover eseguire una modifica/aggiunta ad un sito esistente, sempre fatto dal sottoscritto.
    Attualmente il cliente ha la possibilità di inserire nouve newsletter dal pannello di amministrazione: titolo e testo della medesima. Volendo puo' metterne anche più di una, vengono salvate sul db e inviate in ordine di inserimento.
    Come? Ho un file php che esegue un controllo sull'esistenza o meno di newsletter da inviare nel db, se la risposta è affermativa, prende 50 mail dal db delle mail, cicla e le invia. Il tutto è gestito da un crontab che passa ogni ora ed esegue la medesima cosa, riprende la prima newsletter disponibile, estrae le 50 mial successive ed invia, così fin quando non ha esaurito tutte le mail, alla fine setta la newsletter nel db come inviata e passa alla successiva, sempre che ve ne siano.

    Fin qui tutto ok, nessun problema, niente di strano diciamo.

    Ora per motivi che non sto qui a spiegare, vi è la necessità di farne una nuova affiancata a quella esistente, ma automatizzata, ovvero, nel sito esistono due sezioni di news, dato che il cliente prepara ed invia newsletter ad ogni morte di papa, vorrei far inviare in automatico le news delle due categorie di cui prima.
    Il prolema non sta nell'eseguire la query che mi estrae le news (quelle ancora attive piuttosto che le ultime 5, ecc,ecc), ma nella logica della cosa.

    Quindi, attualmente abbiamo un crontab che esegue ogni ora il controllo e l'invio a 50 mail delle newsletter generali. Chiaramente il db delle mail iscritte è uno solo e il procedimento che uso è: estraggo le 50 mail le ciclo, inserisco il nome e cognome dell'utente registrato, compilo la mail, invio e spunto il campo "inviata", in questo modo dovrei evitare al masimo reinvii o mancati invii per qualsiasi motivo e la query di estrazione è sempre LIMIT 0,50 andando ad estrarre solo le mail che non hanno la spunta su "inviata".
    Ora dovendo far eseguire una nuova newsletter che pesca le mail dal medesimo db, sorgono dei dubbi su come procedere.

    Pensavo, faccio fare un controllo in più alla attuale newsletter, se ho qualcosa da inviare ma anche la seconda newsletter sta inviando, mi fermo e ricontrollo tra un ora se la seconda ha finito, ovviamente anche la nouva newsletter deve eseguire il medesimo controllo.
    Poi però mi sono reso conto di una cosa, se la prima newsletter esegue il controllo ed ha da inviare e la seconda invece no, parte ed invia le prime 50 mail, dopo un ora torna, esegue il medesimo controllo e diciamo che invia altre 50 mail (e siamo a 100), la terza ora però anche la seconda newsletter si rende conto di aver qualcosa da inviare, ma si ferma perche la prima sta lavorando, peccato che quando la prima che ha gia inviato 100 mail, torna a controllare sa di avere qualcosa da inviare ma vede che anche la seconda ha pronti degli invii....e si ferma....e qui casca l'asino e crolla il castello di carte.
    Allora mi son detto, faccio tre crontab, due ogni ora e uno settimanale, i primi due passano ogni ora ed eseguono gli eventuali invii, il trezo passa settimanalmente per compilare la eventuale newsletter delle news, ma solo se la prima non sta facendo altro, i questo modo ovvio al problema, se la newsletter generale sta inviando non genero la seconda newsletter, così al sucessivo invio della prima non ho uno stop, quando avrà finito al sucessivo controllo genererò la newsletter delle news e di conseguenza partiranno anche i rispettivi invii fermando la partenza di eventuali nouve newsletter generali.

    Un po' contorto? Forse si, soprattutto perchè se sono in programma 5 newsletter generali, probabilmente ci impiega più di una settimana a mandarle tutte e 5 a tutti gli utenti registrati, posticipando sempre la creazione e l'invio della newsletter delle news, che nel frattempo decaderanno o addirittura verranno cancellate perchè ormai vecchie....sgrunt.

    Ora che ho scritto il decamerone...sorry...l'unico modo che rimane è aggiungere nella tabella delle mail un campo in più, tipo "inviata2", su cui far agire gli invii della newsletter delle news così non ho più la necessità di controllare e femarne per forza una delle due.
    I due crontab però passerebbero entrambi ogni ora, non è che si incasinano eseguendo query simultanee e invii simultanei, che diventerebbero 100 e non 50 a botta?

    Scusate la lnghezza del post, ma la sintesi non è il mio forte, si accettano consili.

    Grazie
    SK

  2. #2
    Non sarebbe più semplice creare una tabella chiamata "coda" nella quale inserisci in coda tutti i messaggi che devi inviare. Poi lo script prende 50 messaggi alla volta, li invia e li elimina dalla coda.

    In questo modo ti basta aggiungere in coda i nuovi messaggi senza complicati controlli incrociati.

    Lo script che invia le mail deve solo controllare la coda. Se ci sono messaggi li invia, altrimenti non fa niente.

  3. #3
    Originariamente inviato da filippo.toso
    Non sarebbe più semplice creare una tabella chiamata "coda" nella quale inserisci in coda tutti i messaggi che devi inviare. Poi lo script prende 50 messaggi alla volta, li invia e li elimina dalla coda.

    In questo modo ti basta aggiungere in coda i nuovi messaggi senza complicati controlli incrociati.

    Lo script che invia le mail deve solo controllare la coda. Se ci sono messaggi li invia, altrimenti non fa niente.
    Forse fatto sin dall'inizio così si, vedi, il problema sta nel cliente....che novità
    Inizialmente hanno detto...mmmm newsletter, si le conosciamo, gia sentite nominare...ah si io sono iscritto a quelle di cucina, si si, facciamole, e mi hanno chiesto se era possibile prevederle nel loro sito (premessa: sono un ente, quindi lunghi e macchinosi in qualsiasi cosa).
    Secondo me non è che avessero ben ben chiaro cosa fossero e come funzionassero, ora si puo' automatizzare tutto, ma nessun applicativo potrà mai inventarsi e srivere delle newsletter di suo pugno, ci vuole sempre un omino dietro che dica cosa mandare, ecco il loro omino è un po' pigro o forse non ha ancora realizzato la cosa, sai, quando parli/spieghi al cliente una cosa e senti un coro di si.....si si....si....certo...sisisi...siiiii......ma certo...sii....ma in realtà sono: non capisco un tubo e non voglio far figure a chiedere e quindi dico sisisisi che è più bello e professionale, ecco, così.

    Quel che dici tu in effetti viene fatto dalle newsletter originali, da dove non è ancor partita una newsletter (non so se mi spiego!), allora, visto che sto facendo altri lavori sempre per loro, quindi abbiamo ancora i conti aperti ho proposto di fare una sorta di newsletter riassuntiva di tutte le news che loro inseriscono, anche perchè non saprei cos'altro potrebbero inviare.
    Quindi volevo lasciare quel che c'è, così com'è, loro inseriscono una o più newsletter, si accodano e partono una dopo l'altra, senza cancellarle, così hanno voluto, una sorta di archivio...boooo.
    Le nuove le vedevo indipendenti, la fate quel che vi pare, mandate, non mandate, archiviate insomma divertitevi, quelle nuove invece fanno il loro lavoro periodicamente ed automaticamente.
    Credo comunque di essere arrivato alla soluzione:
    Le vecchie newsletter le lascio così come sono, non tocco nulla, vado invece ad aggiungere un nuovo campo enum nella tabella delle mail "inviata_news" sul quale faccio il medesimo gioco delle vecchie, quindi rimangono indipendenti anche gli invii, al crontab delle nuove do un orario leggermente diverso, se il primo passa al minuto 4 di tutte le ore di tutti i giorni, l'altro passerà al minuto 34 di tutte le ore di tutti i giorni, nessun accavallamento di query e nessun problema di dovre fermare nessuno. Un terzo crontab passerà con cadenza settimanale a controllare, estrarre e compilare la nuova newsletter, buttata via ad ogni fine invio e chiaramente azzerando tutti i campi "inviata_news" per il prossimo ciclo di invii.
    Che dici?

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.