Risultati da 1 a 7 di 7

Discussione: aiuto per mailing list

  1. #1
    annazampa è offline Nuovo Iscritto
    Data Registrazione
    Feb 2012
    Messaggi
    3

    aiuto per mailing list

    Ciao a tutti, sono nuova sia per il forum sia per il php
    Purtroppo dalla grafica mi tocca imparare anche la programmazione... cosa non si fa pur di lavorare! E una settimana che sto facendo tentativi su tentativi per fare uno script che mi invii in automatico un messaggio html (e fin qui ci sono arrivata), il problema è che gli utenti sono circa un migliaio!!! chiedendo aiuto in giro mi hanno suggerito swiftmailer che dopo molti tentativi sono riuscita a fare qualcosina, tuttavia non va ancora bene, nel senso che una volta che inoltro i dati la pagina continua ad andare e non finisce di spedire tutti i messaggi (o almeno credo).

    Posto lo script, se qualcuno gentilmente mi può dare suggerimenti

    Codice PHP:
    <?php
    require_once '/lib/swift_required.php';

    if(
    $_POST["send"]) {


    $where "idconfig = 1";
    $mysql = new queryclass("mamba_newsletter_config"""$where);
    $mysql->select();
    $config_admin_name $mysql->result["config_admin_name"][1];
    $config_admin_email $mysql->result["config_admin_email"][1];
    $config_label1 $mysql->result["config_label1"][1];
    $config_label2 $mysql->result["config_label2"][1];
    unset(
    $mysql);

    //riempo l'array con tutti gli indirizzi email:
    $to[] = "tutti gli indirizzi email";

    //dati smtp
    $smtp_config = array(
    'newsletter_title'=>'xxxxxxxx',
    'name_from'=>'xxxxxxxx',
    'email_from'=>'xxxxxxxx',
    'email_to'=>'xxxxxxxxx',
    'connection'=>'smtp.xxxxxxxxxxx',
    'username'=>'xxxxxxxxxxxx',
    'password'=>'xxxxxxxx',
    'port'=> 25,
    'encryption'=>false);

    //Create the Transport
    if(!$smtp_config['encryption']) {
    $transport Swift_SmtpTransport::newInstance($smtp_config['connection'], $smtp_config['port'])
    ->
    setUsername($smtp_config['username'])
    ->
    setPassword($smtp_config['password']);
    } else {
    $transport Swift_SmtpTransport::newInstance($smtp_config['connection'], $smtp_config['port'])
    ->
    setUsername($smtp_config['username'])
    ->
    setPassword($smtp_config['password'])
    ->
    setEncryption($smtp_config['encryption']);
    }

    $mailer = new Swift_Mailer($transport);

    $mailer->registerPlugin(new Swift_Plugins_AntiFloodPlugin(10030));
    Swift_Preferences::getInstance()->setCacheType('null');

    // Create email
    $message Swift_Message::newInstance();
    $message->setSubject($smtp_config['newsletter_title']);
    $message->setFrom(array($smtp_config['email_from'] => $smtp_config['name_from']));
    $message->setMaxLineLength(1000);
    $message->setEncoder(Swift_Encoding::get8BitEncoding());

    //Send the message
    $failedRecipients = array();
    $numSent 0;

    foreach(
    $to as $address => $name) {
    if (
    is_int($address)) {
    $message->setTo($name);
    } else {
    $message->setTo(array($address => $name));
    }
    $message->setBody($message_body,'text/html');
    $numSent += $mailer->send($message$failedRecipients);
    }
    echo 
    '<div id="newsletter_wait">';
    printf("Sent %d messages\n"$numSent);
    echo 
    '</div>';
    };
    ?>

    piu o meno è questo.

    grazie!
    annazampa
    Ultima modifica di alessandro1997; 04-02-2012 alle 08:47

  2. #2
    L'avatar di borgo italia
    borgo italia è online Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    7,309
    ciao
    intendi che lo script si arresta senza finire il ciclo foreach e quindi non invia a tutti gli indirizzi?
    se è così ho avuto anche io lo stesso problema è ho risolto:
    1. mettendo nel ciclo usleep(500000) che lo arresta tra un invio e l'altro di mezzo secondo, questo per cercare di impedire l'intasamento del server di invio
    2. usualmente il tempo di vita di uno script è 30 secondi (ini.php di default), quindi uno script che supera tale limite si arresta, quindi ho allungato
    tale limite con l'istruzione set_time_limit
    fatto questo a me a cominciato a funziare

    Codice PHP:
    <?php
    //set_time_limit allunga il tempo di vita dello script
    //dovresti mettere (al posto di 240) il valore risultante da numero_indirizzi * 0.5 sec + un tot
    set_time_limit(240);
    //....

    //.....
    foreach($to as $address => $name) {
        if (
    is_int($address)) {
            
    $message->setTo($name);
        } else {
            
    $message->setTo(array($address => $name));
        }
        
    $message->setBody($message_body,'text/html');
        
    $numSent += $mailer->send($message$failedRecipients);
        
    usleep(500000);//arresta il ciclo per mezzo secondo tra un invio e l'eltro
    }
    echo 
    '<div id="newsletter_wait">';
    printf("Sent %d messages\n"$numSent);
    echo 
    '</div>';
    };
    ?>
    certo io lavoravo in locale
    prova, al massimo non funzia

  3. #3
    L'avatar di alessandro1997
    alessandro1997 è offline Super Moderatore
    Data Registrazione
    Oct 2009
    Località
    Roma
    Messaggi
    4,252
    borgo, non è più semplice scrivere:
    Codice PHP:
    set_time_limit(0); 
    Per disabilitare completamente il limite di tempo?

    Altra cosa: puoi risparmiare tempo togliendo la chiamata a setBody dal ciclo.
    Codice PHP:
    $message->setBody($message_body'text/html');
    foreach (
    $to as $address => $name) {
        if (
    is_int($address)) {
            
    $message->setTo($name);
        } else {
            
    $message->setTo(array($address => $name));
        }

        
    $numSent += $mailer->send($message$failedRecipients);

    Alessandro 'alessandro1997' Desantis
    http://about.me/alessandro1997
    http://www.alessandro1997.net

    Sono disponibile per la realizzazione di lavori su commissione.

  4. #4
    L'avatar di borgo italia
    borgo italia è online Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    7,309
    ciao
    @alex: hai ragione, poi un'altra cosa (ma io uso phpmailler):
    quando mi ero fatto lo script ho dovuto mettere
    $Emailmessaggio->ClearAddresses();
    perche altrimenti al primo mi inviava
    pinco
    al secondo
    pinco e pallo
    el terzo
    pinco, pallo e sempronio
    non è da prevedere anche con Swift?

  5. #5
    L'avatar di alessandro1997
    alessandro1997 è offline Super Moderatore
    Data Registrazione
    Oct 2009
    Località
    Roma
    Messaggi
    4,252
    No, perché setTo, come suggerisce il nome, sovrascrive il precedente valore della proprietà. Dovrebbe esserci anche il metodo addTo, che aggiunge un indirizzo alla lista.
    Alessandro 'alessandro1997' Desantis
    http://about.me/alessandro1997
    http://www.alessandro1997.net

    Sono disponibile per la realizzazione di lavori su commissione.

  6. #6
    annazampa è offline Nuovo Iscritto
    Data Registrazione
    Feb 2012
    Messaggi
    3
    Grazie davvero ragazzi!
    ho provato a inserire i suggerimenti di borgo italia, vediamo cosa succede quando inviano la prossima newsletter.

    grazie anche ad alessandro1997
    purtroppo non posso spostare il setBody perché ho inserito il link personalizzato per ogni utente per cancellarsi dalla newsletter :-)

    vi spiego meglio cosa succedeva:
    cliccando il pulsante invia il php esegue lo script ma la pagina non finisce di caricarsi (rimane la "rotellina") e non conclude il caricamento.
    Il cliente ha dei dubbi che i messaggi non partono :-(
    magari con i suggerimenti di borgo funziona meglio!

    ho sentito parlare anche dell'invio in batch o qualcosa di simile, che a quel che ho capito lo script esegue l'invio in background dopo l'invio…
    ho capito giusto?

    grazie annazampa

  7. #7
    annazampa è offline Nuovo Iscritto
    Data Registrazione
    Feb 2012
    Messaggi
    3
    ma non esiste uno script definitivo per queste cose? (domanda da profana)

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •