Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Email che non arrivano

  1. #1

    Email che non arrivano

    Ciao a tutti, sto gestendo una mailing list di circa 2.100 record per conto di un cliente. Uso questo script per far sì che il cliente possa inviare occasionalmente una newsletter:

    Codice PHP:
    <ul>
    <?php

    $users_db        
    $db->query("SELECT name, email FROM users");
    $newsletter_db $db->queryUniqueObject("SELECT * FROM newsletters WHERE _id=$id");

    include_once 
    '../application/shared/newsletter.php'// static

    while ($user $db->fetchNextObject($users_db)) {
        
        if (
    mail($user->email$newsletter_db->title$newsletter$headers)) {
            echo 
    "[*]Newsletter spedita a [b]{$user_name}[/b] ({$user->email}).";
        }else{
            echo 
    "<li style='color:red'>ERRORE: [b]{$user_name}[/b] ({$user->email}).";
        }
    }

    $db->execute("UPDATE newsletters SET sendingDate = NOW() WHERE _id=$id");
    echo 
    "<p style='color:green'>Invio newsletter concluso con successo!</p>";

    ?>[/list]
    L'ho testato e funziona, ma i miei test si sono limitati a una dozzina di indirizzi email, e non so come "reagisce" invece quando gli indirizzi diventano migliaia.
    So per certo che l'ultima volta lo script ha funzionato fino a un certo punto e poi ha fallito, questo perché:
    [list=1][*]La newsletter è arrivata ai primi indirizzi nel database;[*]La newsletter non è arrivata ad un mio indirizzo che era tra gli ultimi record;[*]L'ultima query non è stata eseguita.[/list=1]
    Chiedo a voi esperti, quale può essere stata la causa dell'interruzione dello script?
    Potrebbe essersi esaurita la memoria a runtime?
    Ma sopratutto, quale può essere la soluzione a un problema del genere, considerando che sono in shared hosting e non ho quindi la possibilità di aumentare la memoria di PHP a mio piacimento?

    Ringrazio in anticipo.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    52
    Innanzitutto potresti ritardare l'invio con un utilizzo a blocchi delle email. Poi procedi con una pausa tra un blocco e l'altro (anche un refresh della pagina in javascript andrebbe bene).

    Naturalmente ogni blocco devi flaggarlo come "inviato" prima del refresh, altrimenti ti invia sempre le stesse email.

    Se il problema non dovesse risolversi, dovresti optare per un servizio SMTP a pagamento che ti permette di utilizzarlo all'interno del tuo codice PHP.

    Es.

    Prima del refresh

    codice:
     SELECT name, email FROM users WHERE inviato=0 LIMIT 0, 30
    Durante il while:
    codice:
     UPDATE users SET inviato=1 WHERE id=$id
    Poi fai eseguire il refresh (es.. 20 secondi)

  3. #3
    Grazie mille per l'idea, penso proprio che implementerò qualcosa del genere.

    Ho dato un'occhiata in giro per vedere come altri script gestiscono il problema, e a quanto pare è una soluzione comune. Ad esempio c'è phpList che spedisce 1000 email prima di refreshare, io magari proverò con 100 per non avere problemi.

    Grazie ancora

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.