Problema con la funzione mail

  • Creatore Discussione Creatore Discussione peeks
  • Data di inizio Data di inizio

peeks

Nuovo Utente
11 Gen 2011
6
0
0
Ciao a tutti
sono nuovo del mondo php, ho cominciato da qualche mese.
Sto strutturando una newsletter con la funzione mail, ma mi restituisce un errore!
ho fatto un pò di debug per vedere quale invia e quali no, praticamente non invia tutte le email che hanno un punto in mezzo! es. [email protected] non la invia [email protected] si!
dato che non mi era mai successa una cosa simile, come la risolvo?
grazie anticipatamente!
 
Questa è la porzione di codice


PHP:
$query_mail = "SELECT email FROM newsletter";
                $result_mail = mysql_query($query_mail);

		$oggetto = "NewsLetter";
		$header = "From: Ciccio\n";
		$header .= "MIME-Version: 1.0\n";
		$header .= "Content-Type: text/html; charset=\"UTF-8\"\n";
		$header .= "<style>body {background-color:#FFFFFF;}</style>";
		$header .= "<div style='background-color:#FFFFFF;'>";
		$header .= "<table style='width:80%;text-align:justify;'><tr><td>";
		$header .= "<img align='center' src='immagine.jpg' alt='immagine' /></td><td class='testo'>NewsLetter del ".date("d-m-Y")."</td><tr><td colspan='2'>";

		if ($_SESSION['testo']!=''){ $msgformat = $_SESSION['testo']; } else { $msgformat = $riga['testo'];}
		$msgformat .= "</td></tr>";
                $msgformat .= "</table></div>";

                while ($row = mysql_fetch_array($result_mail,MYSQL_ASSOC)){
                    $mail = $row['email'];     
		    if(mail($mail, $oggetto, $msgformat, $header)){
			echo "<img class='errore3_news' src='../images/messaggi/Conf_news.jpg' />";
                        echo $mail." mail inviata "; //questo per vedere quali invia
		    }
                    else{
			echo "<img class='errore3_news' src='../images/messaggi/errore.jpg' />";
                        echo $mail." mail non inviata"; //questo per vedere quali email non invia
                    }

		}
 
ho fatto diverse prove, ho provato ad invertire gli indirizzi, il discorso del punto era una casualità, spedisce l'e-mail solo ai primi tre indirizzi poi fallisce tutti gli altri...intanto gli indirizzi li legge bene da db...può essere che c'è qualcosa che non va nello script?
 
ciao
puo essere dovuto al server che si "intasa".
prova a mettere dentro il ciclo while
PHP:
<?php
//....
usleep(50);
}
//...
?>
oppure, se gli indirizzi sono molti e l'invio lento, può essere che il tempo di vita dello script sia poco e che quindi si interrompa
prova a mettere all'inizio

PHP:
<?php
set_time_limit(240);
//....
?>

altro accorgimento: metti un limite di invio (es 100 email), interrompi e riparti, dopo un po', con le successive 100.
questi tre accorgimenti (a parte che uso la classe phpmailler e non la funzione mail) mi hanno risolto i problemi.

p.s.
se usi la phpmaiiler puoi meglio lavorare in locale e, quindi, accelerare il tutto
 
Si attualmente come prova è su altervista in attesa che aruba mi attivi il dominio...credo anche io che il problema sia questo!
 
Altervista consente l'invio di due e-mail ogni tre secondi, se mi ricordo bene. Questo significa che ogni due e-mail dovrai mettere lo script in attesa per tre secondi. Se hai molte e-mail potrebbe essere un problema.

Una soluzione è inserire gli indirizzi in Bcc, ma questo comporta alcuni problemi:
  • Chiunque potrà leggere gli altri indirizzi registrati alla newsletter.
  • La funzione mail di PHP richiede necessariamente il parametro $to, quindi dovrai connetterti direttamente al server SMTP.
Un'altra soluzione sarebbe cambiare hosting!
 
ciao
oppure come detto porti usleep in modo che passi 1 o 1,5 sec tra un invio e l'altro (cosi invii tra email nel tempo previsto) e aumenti il tempo di vita dello script
 
premesso che su altervista è solo per prova, ho risolto mettendo la funzione usleep :mavieni:
grazie! :D
 

Discussioni simili