Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di angelo85ct
    Registrato dal
    Dec 2007
    Messaggi
    322

    invio email, prelevando indirizzi da un db, come evitate Errore 504 Gateway Time-Out

    Cioa racazzi, ho un db, con parecchie emial, e dovrei mandare un messaggio contenete un oggetto, piccolo testo, e un'email come mittente, ho creato il seguente codice:

    Codice PHP:
    <?php
    if(isSet($_GET["invia"])){
            if(
    $_GET["invia"]==1){
            
    //echo $_POST['captcha'];
            
    $oggetto"Richiesta di Informazioni";
            
    $messaggio="messaggio da inviare";
    $y=mysql_query("SELECT indirizzodiposta FROM contatti  ");
        while(
    $result=mysql_fetch_array($y)) $destinatario[]=$result[0];
            for(
    $i=0;$i<count($destinatario);$i++){
            
    $a mail($destinatario[$i], $oggetto$messaggio"From: ".$_POST['nomecognome']." <".$_POST['email'].">")or print("<script>alert('Errore invio E-mail!') </script>");}
                
    $b=mail("email@emaildiverifica.it"$oggetto$messaggio"From: ".$_POST['nomecognome']." <".$_POST['email'].">");
                
                if(
    $a){print ("<script> alert('Messaggio inviato correttamente!') </script>");} ?>

                        
                
    <?php }} ?>


    <table width="500" border="0">
      <tr>
        <td></td>
      </tr>
    </table>
    <form name="modulo" method="POST" action="contatti.php?&amp;invia=1" onSubmit="return formCheck(this)">
    <table width="462">    
        <tr align="left">
            <td width="125">Cognome e Nome</td>
            <td width="325"><input type="text" name="nomecognome"  value="<?php echo (isset($_POST['nomecognome']) ? $_POST['nomecognome'] : ''); ?>"size="35"></td>
        </tr>
        
        <tr align="left">
            <td>E-mail</td>
            <td><input type="text" name="email" size="35"   value="<?php echo (isset($_POST['email']) ? $_POST['email'] : ''); ?>" onBlur="return ControllaMail()"></td>
        </tr>    
        
        <tr align="center">
            <td colspan="2" align="center"><input type="submit" value="Invia messaggio!" title="Invia messaggio!" ></td>
        </tr>
    </table>
    </form>



    ma dopo un po di tempo mi appare: Errore 504 Gateway Time-Out

    mi potete aiutare per far in modo che non succeda? e mandi tutte e oltre le 1500 email??

    grazie .

  2. #2
    non è una buona idea mandare una mail con 1500 destinatari ... spezzala a blocchi di, al massimo, 100 elementi o ancora meglio di 50 elementi
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Utente di HTML.it L'avatar di angelo85ct
    Registrato dal
    Dec 2007
    Messaggi
    322
    ma non c'è qualcosa che me li possa spezzare a blocchi ed inviare ogni tot di secondi? o lo devo fare manualmente??

  4. #4
    Il problema principali è che (ho visto ora) tu mandi 1 e-mail per destinatario quando, invece, usando l'header BCC puoi inviarli contemporaneamente a blocchi di 50 e 100 come fosse una sola e-mail ... senza uccidere il mail server

    Spezzarli è semplicissimo! Attualmente tu metti tutto dentro un array chiamato destinatario: molto semplicemente porta il FOR dentro il WHILE! il FOR dentro il WHILE lo sostituisci con un IF che conta (tramite count o una somma che gestisci a parte) l'array destinatari e se questo contiene 50 elementi (o 100 elementi, vedi tu) fa scattare il codice.
    Per "sostituire" il FOR con un IF intendo che proprio togli il FOR e ci metti l'IF con la condizione su.

    Il comando mail, poi, lo trasformi per utilizzare l'header BCC da
    Codice PHP:
    $a mail($destinatario[$i], $oggetto$messaggio"From: ".$_POST['nomecognome']." <".$_POST['email'].">"); 
    a
    Codice PHP:
    $a mail('newsletter@nomesito.tld'$oggetto$messaggio"From: " $_POST['nomecognome'] . " <" $_POST['email'] . ">\r\nBcc: <" implode('>, <'$destinatario) . ">");
    $destinatario = array(); 
    più o meno questo è quello che c'è da fare se non ho dimenticato nulla

    Per maggiori informazioni sul comando mail
    http://www.php.net/manual/en/function.mail.php

    e su wikipedia
    http://en.wikipedia.org/wiki/Blind_carbon_copy (o la versione italiana http://it.wikipedia.org/wiki/Copia_conoscenza_nascosta )
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    Utente di HTML.it L'avatar di angelo85ct
    Registrato dal
    Dec 2007
    Messaggi
    322
    ti ringrazio... anche se sono un po confuso, non ho capito bene come fare il ciclo.... cmq vediamo che riesco a fare....

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.