Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 36
  1. #1

    Time Out, spezzare lista di mail phpmailer

    chiedo ancora scusa agli admin del sito.

    ciao ragazzi, attualmente ho questo script:
    codice:
    <?php
    
    //inclusione dei file di configurazione e connessione al DB mysql
    require_once('./include/config.php');
    
    //inclusione dei file di configurazione di phpmailer
    require_once('./phpmailer/class.phpmailer.php');
    
    //inserimento del testo mediante CKEDITOR
    $body = trim(str_replace("'", "\'",$_POST['editor1']));
    
    $soggetto = $_POST['subject'];
    
    //insert del testo nella tabella newsletter assegnandoli un ID
    $result = mysql_query ("insert into newsletter (`id`, `testo`)VALUES(NULL,'".$body."')");
    
    //select dello stesso testo da inserire nella mail nel body
    $textSend = mysql_query ("select testo from newsletter where id=".mysql_insert_id());
    $txt = mysql_fetch_row($textSend);
    
    $mail = new PHPMailer(true); 
    
    // setta il protocollo SMTP
    $mail->IsSMTP();  
    
    // specifica il server SMTP                       
    $mail->Host = "smtp.sito.it";   
    
    // setta la porta smtp in genere 25 per il protocollo SMTP, 465 per il protocollo SMTPS
    $mail->port = 25; 
    
    // avvia l'autenticazione
    $mail->SMTPAuth = false;       
    
    // SMTP username
    $mail->Username = "newsletter@sito.it";   
    
    // SMTP password
    $mail->Password = "";  
    
    //query che seleziona le mail dal DB
    $result = mysql_query("select email from mailing_list");
    while ($to = mysql_fetch_array($result, MYSQL_NUM)) {
    
      $mail->AddReplyTo('newsletter@sito.it');
      $mail->AddAddress('info@sito.it');
      $mail->AddBCC ($to[0]);
    //  $mail->AddAddress('typhoon2002@libero.it');
      $mail->SetFrom ('newsletter@sito.it');
      $mail->Subject = $soggetto;
    //  $mail->AltBody = 'Per visualizzare il messaggio, si prega di utilizzare un visualizzatore HTML e-mail compatibile!'; // optional - MsgHTML will create an alternate automatically
      $mail->MsgHTML($txt[0]);
      }
      
      $page = 'newsLetterOk.html';
    	header("Location: $page");
    	   
        if(!$mail->Send()) {
    		$page = 'newsLetterKo.html'; 
    		header("Location: $page");
        	exit;
    	}
    ?>
    il problema sussiste nell'inviare le mail o meglio lo script funziona fino ad un 100inaio di utenti, solo che avendone 600 mi va in time out, la mia idea era di spezzare le mail in codoni di 50 mail solo che non ho la minima idea di come fare e di come integrare il tutto al codice esistente... una mano o un consiglio?

  2. #2
    Evita Problemi aumenta il timeout della pagina

    ex. set_time_limit(int seconds).

  3. #3
    l'ho già fatto, persino dalla classe di phpmailer ma niente di niente, mettere un set timeout così nello script quando poi viene richiamata la classe phpmailer con anche i valori di timing out mi sembrava una cosa non tanto furba, pensi che il comando dato nello script stesso possa andare ad agire direttamente sovrastando quello della classe?

  4. #4
    ancora niente....uff

  5. #5
    Ciao!
    Può essere che il servizio di hosting che utilizzi non ti permetta di inviare mail massive.
    Fai un controllo
    Lo scoppato
    andrea@progettipercomunicare.it
    www.progettipercomunicare.it

  6. #6
    si tratta di Aruba, ho provato a telefonargli ma mi hanno consigliato di accendere un ticket per assistenza...adesso provo, a fare come dicono loro, in caso mi dicessero che effettivamente circa 500 mail sono troppe per loro, girando sul forum mi sono imbattuto in questo script:

    codice:
    $email = true;
    $contatore = 0;
    
    while($email)
    {
        $query = mysql_query("SELECT id,mail FROM mail_list LIMIT ".($contatore * $blocco).", $blocco");
        if (mysql_num_rows($query))
        {
    
          unset($header);
    
          for ($i = 0; $i < mysql_num_rows($query); $i++)
          {
              $row = mysql_fetch_array($query);
    
              // mettiamo nell'header tutti i riceventi
              $header .= "Bcc: <". $row['id'] .">\r\n";
          }
    
          // inviamo la mail
          mail($destinatario, $oggetto, $testo, $header1.$header.$header2);
    
          $contatore++;
        }
        else
          $email = false;
    }
    ovviamente è da riadattare per phpmailer, ed inserirlo nello script sopracitato. Chiedo gentilmente di tenermi in contatto con voi XD. E' da una settimana che sto battendo la testa ovunque, prima sembra funzionare, il giorno dopo esplode tutto ahahahahah.

  7. #7
    Utente di HTML.it L'avatar di homerbit
    Registrato dal
    Dec 2005
    residenza
    Roma
    Messaggi
    1,380
    ottimizza più che puoi il codice della newsletter, comprese le eventuali immagini, quindi invia in blocchi via via più piccoli (con il codice che hai postato,modificato!) fino a risolvere il problema.

    Certo, dipende da quanti indirizzi hai. Io in questo modo sono riuscito a gestirne dai 5 ai 6mila senza problemi, non so dirti cosa potrebbe accadere per db molto più corposi...
    Il timeout sulla pagina niene ignorato se troppo alto.
    Facce sapè

  8. #8
    Allora fai cosi
    metti 1 variabile nel ciclo che conti a partire dalla 1 email che mandi e la incrementi....
    quando arivi a 50 fai 1 redirect alla stessa pagina ma con il parametro

    ex indexmail.php?icontatore=50

    quando riparte il ciclo lanci la procedura che c'è al suo interno solo dopo che la variabile del ciclo è maggiore di quella che estrai dai pal parametro che hai passato (chiaramente quando ricavi quel valore lo metti in 1 variabile con un nome diverso da quella che usi nel ciclo )

    e poi appena la varibile raggiunge 50 rifai l'operazione

    ex indexmail.php?icontatore=100
    ex indexmail.php?icontatore=150
    ecc...

  9. #9
    grazie di tutto virtual friend...al momento ho modificato il codice in questa maniera, la mail me la spedisce, ho provato sulla mia pelle, giustamente immagino il fastidio di far ricevere ogni giorno centinaia di prove agli utenti, attualmente ho inserito nel db 50 indirizzi sempre uguali ovvero il mio...

    la mail mi è arrivata, me ne è arrivata solo una, immaginavo di riceverne 50... cmq il codice modificato rimane questo... speriamo in bene... :

    P.S. se si riscontrassero errori di sintassi sbagliata oppure consigli su come migliorarlo, io le critiche sappiate che le accetto anzi quasi le bramo XD se posso migliorarmi

    codice:
     
    <?php
    
    ... 
    
    $blocco = 50 
    $email = true;
    $contatore = 0;
    
    while($email) {
    
      $mail->AddReplyTo('newsletter@sito.it');
      $mail->AddAddress('info@sito.it');
       
      $query = mysql_query("SELECT id,email FROM mailing_list LIMIT ".($contatore * $blocco).", $blocco");
       
        if (mysql_num_rows($query))
        {
    
          unset($mail->AddBCC);
    
          for ($i = 0; $i < mysql_num_rows($query); $i++)
          {
             $row = mysql_fetch_array($query);
    
              // mettiamo nell'header tutti i riceventi
             $mail->AddBCC ($row['id']);
          }
    	 
      $mail->SetFrom ('newsletter@sito.it');
      $mail->Subject = $soggetto;
      $mail->MsgHTML($txt[0]);
      
      $contatore++;
       
      }
        else
          $email = false;
    }
    
    ?>
    @webmasterala, io l'avevo pensata così, più o meno si avvicina al tuo mi pare, ciclare con un counter che aumenta di volta in volta, eseguendo il ciclo ogni volta...

  10. #10
    esito della prova.....??? negativo, non funziona restituisce delle eccezioni di phpmailer, oppure arriva alla mail 51 e si inchioda dicendo che non può proseguire oltre come se non riuscisse a caricare il blocco successivo... grrrrrr....

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 © 2024 vBulletin Solutions, Inc. All rights reserved.