Invio e-mail tramite Swift e Internal Server Error

Tavrotto

Nuovo Utente
18 Mar 2007
4
0
0
L'ambito è sempre una newsletter (come nel mio post precedente).
Devo inivare una stessa e-mail a più di 2000 indirizzi.

Premetto: ho già preimpostato la variabile max_execution_time a 900.

Inizialmente ho scelto di usare la classe di PHPMailer ricevendo però alcuni errori (che non dipendono dalla comodissima classe).

Ho provato allora ad utilizzare Swift, classe con lo stesso scopo.

Il server su cui testo l'invio è un server aruba con SMTP: smtp:aruba.it con hosting Linux.

Testando l'inoltro per 2000 indirizzi funziona tutto (l'inoltro e la corretta ricezione di tutti e 2000 gli indirizzi) ma ad un certo punto la pagina web, anzichè reindirizzarmi su esito.php, mi scrive chiaramente

------------------------------------

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

PS: i log del server non funzionano :S

--------------------------------------

OK, PROVO A POSTARE IL CODICE
Chiedo umilmente scusa a tutti per lo spaghetti code qui sotto...
Purtroppo la mancanza di tempo, le continue modifiche e test e la compressione del tutto per raggrupparlo in un unico file da incollare qui sul forum, hanno contribuito a peggiorare notevolmente lo script... grazie
----------------------------------------------------------------------------------------------------------------
<?php
require 'testa.php';

##########################################

/*
* Classe che prende indirizzi e-mail da un database MySQL,
* li suddivide in blocchi (20 di default) e invia una e-mail personalizzata
* ad ognuno di questi destinatari.
*/

$met = '900';
$fdd = '20';
$anteprima = stripslashes($_POST['anteprima_seria']);

// includo le librerie necessarie alla connnessione al database
require_once "lib/Swift.php";
require_once "lib/Swift/Connection/SMTP.php";
include "mdb-database/config.inc.php";

$swift =& new Swift(new Swift_Connection_SMTP("smtp.aruba.it", 25));

// estendo il max_execution_time a TOT minuti per ogni invio in blocco
ini_set('max_execution_time', $met);
ini_set('display_errors', 'Off');

// id newsletter
$id_nl = htmlspecialchars($_POST['id']);

// OGGETTO DELLA NEWSLETTER

$path = 'http://www.miosito.ext/';

// TESTO DELLA NEWSLETTER
$testo = '';
$testo .= '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv=Content-Type content="text/html; charset=UTF-8" /><title>Newsletter</title>';
$testo .= '<META http-equiv="Content-Type" content="text/html; charset=UTF-8">';
$testo .= '<link rel="stylesheet" type="text/css" href="'.$path.'style.css" />';
$testo .= '</head><body>';
// CONTENT
$testo .= $_POST['anteprima_seria'];
$testo .= '</body></html>';

// IMPOSTO LA NEWSLETTER COME "INVIATA"
$sql_nl_inviata = 'UPDATE archivio SET inviata="1", data_invio="'.date("Y-m-d").'" WHERE id="'.$id_nl.'"';
@mysql_query($sql_nl_inviata, $conn);

// PREPARO ED ESEGUO L'INVIO

// calcolo il numero di blocchi da considerare
$sql_count_indirizzi = 'SELECT COUNT(*) FROM newsletter';
$res_count = mysql_query($sql_count_indirizzi, $conn)
or die(mysql_error());

// controllo se il numero di indirizzi è maggiore del numero di
// indirizzi per blocco

$numero_iscritti_tmp = mysql_fetch_row($res_count);
$numero_iscritti = $numero_iscritti_tmp[0];

if($numero_iscritti>$fdd){
// divido il numero di iscritti totali per il numero di blocchi desiderato
$n_blocchi = ($numero_iscritti/$fdd);

// arrotondo il risultato ad un intero
if(is_float($n_blocchi))
$n_blocchi = (int)$n_blocchi+1;
else
$n_blocchi = (int)$n_blocchi;
}
else
$n_blocchi = 1;

// per ogni blocco effettuo una query chiedendo un preciso range
// di indirizzi
for($i = 0; $i < $n_blocchi; $i++){

// controllo se il blocco è il primo (parte da 0) o uno dei
// successivi
if(($i+1) <= $n_blocchi){
// selezioni il range di record da mostrare
$da = ($fdd * $i);

$limit = ' LIMIT '.$da.', '.$fdd;
}
else
$limit = ' LIMIT 0, '.$fdd;

// eseguo la query che restituisce il blocco di indirizzi interessato
$sql_blocco_indirizzi = 'SELECT email FROM newsletter '.$limit;
$res_blocco = mysql_query($sql_blocco_indirizzi, $conn)
or die(header('Location: '.$_SERVER['PHP_SELF']));

$numero = mysql_num_rows($res_blocco);

while($numero>0){

echo '<span style="display: none"> </span>';
--$numero;

$val = mysql_fetch_row($res_blocco);
$message =& new Swift_Message($_POST['oggetto'], $testo, "text/html");
if (!($swift->send($message, trim($val[0]), "[email protected]"))){
echo "Si è verificato un errore durante l'invio dell'indirizzo ".$val[0];
exit();
}
else
echo $val[0].' fatto!<br />';
}
}

//$swift->disconnect();
//header('Location: esito.php?confirm=newsletter');

##########################################

ob_end_clean();
ob_flush();
flush();

echo '<meta http-equiv="refresh" content="0;URL=esito.php?confirm=newsletter">';

echo '<div>';

echo '<table class="list" style="font-size: small">';
echo '<tr><td colspan="2">';
echo '<div class="conferma" style="font-size: small" id="esito">L'invio è stato effettuato con successo!</div>';
echo '<br />';
$op= 'gestisci_email.php';
echo '<div>';
echo '<a href="'.$op.'">« TORNA ALLA LISTA DELLE E-MAIL</a>';
echo '</div>';
echo '</td></tr>';
echo '</table>';
echo '</div>';

// includo la coda
require 'coda.php';

?>
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Potrebbe non essere un problema dello script, tu hai settato a 900 il massimo tempo di esecuzione degli script per PHP; ma qual'è il massimo tempo di esecuzione per Apache o per il Web server se è un altro?
 

Tavrotto

Nuovo Utente
18 Mar 2007
4
0
0
Il massimo tempo di esecuzione per Apache penso sia personalizzabile tramite la funzione ini_set('max_execution_time', $met); che "sovrascrive" il parametro max_execution_time nel file di configurazione del server..

Ho provato anche ad impostarlo semplicemente a 300 (5 minuti)
ma il risultato è lo stesso...

E' ormai molto che cerco di risolvere questo problema ma sinceramente non so più dove sbattere la testa :crying:

Grazie
 

dynamytech

Nuovo Utente
26 Set 2008
1
0
0
Ciao Tavrotto,
purtroppo non ho la soluzione però anche io ho lo stesso problema per uno script di crawling che gira sempre su hosting linux nei server aruba.

all'inizio dello scritp ho impostato questi valori

set_time_limit(1000);
ini_set("max_execution_time","1000");
ini_set("max_input_time","1000");
ini_set("memory_limit","200M");
$_SERVER['HTTP_KEEP_ALIVE ']="1000";

ma inutilmente, infatti ogni volta che lo mando in esecuzione dopo un pò di tempo mi viene restituito internal server error, però ho notato una cosa importante, in pratica per fare il crawling delle pagine del sito uso il mysql e ogni link che becco lo inserisco nel db. Quello che ho notato è che pur ricevendo Internal Server Error, lo script continua a girare infatti i link nel db continuano ad aumentare anche nel mentre ho ricevuto l'errore sul browser. I record aumentano fino ad essere indicizzati tutti.
A questo punto credo che la soluzione vada cercata nel far rimanere il browser in attesa visto che comunque lo script continua a girare nel server!! altrimenti i link nel db non verrebbero aggiunti anche in seguito fino ad indicizzazione completata.
Se trovo qualcosa di nuovo ti faccio sapere.
Ciao ciao!
 
Discussioni simili
Autore Titolo Forum Risposte Data
M WANSCAM Invio allarme tramite mail IP Cam e Videosorveglianza 4
S Form invio mail html, con invio tramite file denominato invio.php PHP 8
F invio di una mail tramite script php PHP 6
antonio_oti Invio di e-mail tramite PHP PHP 23
WorldWideWeb Invio e-mail tramite oggetto CDO - VB6 Visual Basic 1
Robby84 Script invio mail tramite smtp PHP 7
B Invio tramite form mail di più allegati PHP 0
H Invio automatico di e-mail tramite db Classic ASP 1
E Moduli: invio tramite mail HTML e CSS 1
M telecamera Foscam - mancato invio mail ad account gmail IP Cam e Videosorveglianza 0
R Invio mail con allegati multipli PHP 0
R Invio mail con allegati da directory PHP 1
Daniele_Carrara Problema timeout - invio mail PHP 7
U PHP bottone per invio mail o ritorno al form PHP 15
G Invio mail con php da dati prelevati da un database PHP 9
AC1 [PHP] Invio Mail PHP 18
B [PHP] Invio mail automatico dopo compilazione form - db PHP 25
A [PHP] Problema invio mail con funzione mail() PHP 3
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
paloppa [PHP] Invio mail da form dubbio PHP 17
F Form mail php errore invio PHP 5
Punix [PHP] problema script invio e-mail PHP 2
G Invio Mail con PHPMailer, problemi SMTP PHP 7
cobra_72 [PHP] problema invio multiplo allegati mail PHP 21
Z Limite invio newsletter con PHP - mail() PHP 4
E [Javascript] Messaggio di avvenuto invio mail non visualizzato Javascript 1
F Invio Mail con Javascript Javascript 25
E Rimuovere "dati in memoria" dopo invio mail [PHP] PHP 18
lucarpenter Settaggio invio mail allarme IP camera P2P IP Cam e Videosorveglianza 9
I form invio mail HTML e CSS 1
F Invio automatico mail php PHP 0
Francesco Polese Errore form invio mail+php PHP 22
R Errore invio mail in php PHP 1
M Errore invio mail da php Posta Elettronica 5
P invio mail da form con dati php PHP 7
webmachine Come programmare l'invio di una mail in PHP? PHP 1
W Estrapolare un indirizzo mail di un form durante l'invio PHP 5
Z Invio mail da telecamere HIKVision - HELP!!! IP Cam e Videosorveglianza 0
M configurazione invio mail php PHP 25
I invio mail da form PHP 1
asevenx link cliccabile che non funziona con invio mail PHP 1
P Invio mail diversi destinatari PHP 10
W problemi incomprensibili invio mail dal sito in PHP PHP 3
M Invio mail con destinatari da mysql con inserimento di nome e cognome PHP 6
Il Matta Problema Form e invio mail PHP 2
G WansCam invio mail IP Cam e Videosorveglianza 11
B Problema form mail per invio doppio allegato PHP 1
D [Risolto] Invio mail a blocchi Classic ASP 31
A Problema orario invio mail per form PHP 4
S [risolto] Invio scheda dettagliata in mail Classic ASP 6

Discussioni simili