problema script invio email multiplo

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Salve, ho sulla base di un tutorial messo a punto il seguent script che mi permette di inviare email a più destinatari. Attraverso un form ho la possibilità di scegliere l'email mittente da utilizzare, il database dove sono presenti le email e l'oggetto e il messaggio.
Lo script completo è in allegato.
Ora ho due problemi:
1. l'invio di email avviene in blocchi da 50, una volta inviate le prime 50 passerà al newblocco di altre 50 e cosi via. Fino ad arrivare all'ultima email presente nel file.
Il problema è che mi invia solo le prime 50 email e non ripeto il ciclo. L'errore dovrebbe essere nel cookie ma non so dove? :confused:
2. Ho inserito un if per il controllo dell'esistenza del database. Ora se non c'è il database mi stampa un messaggio
if (!file_exists($db)) {echo "Non esiste il database $dbase.txt. Non è possibile inviare email"; //verifica se il database esiste, in caso negativo termina
break;}

altrimenti deve procedere all'invio delle email e alla fine dell'invio stampare il messaggio
echo "La tua email è stata inviata con successo";
Ora se il database non esiste ho il messaggio ed è tutto ok, ma se esiste il database procede all'invio delle email ma alla fine anzichè darmi il messaggio che l'invio è avvenuto ho il messaggio di inesistenza del database.

Sono alle prime armi con il php e facilmente mi perdo anche in un bicchiere d'acqua. se qualcuno mi può aiutare gli sarò grata.
 

Allegati

  • send.zip
    1 KB · Visite: 261

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Sinceramente quello script non mi piace neanche un po'. Lo sto completamente riscrivendo, completo di commenti. Se mi fornisci le specifiche posso sapere meglio come lavorare.

EDIT: Ecco. Questa è una versione basilare che non riceve dati da nessun form, però è un attimo adattarla. In questo caso non imposta nessun cookie, ma l'invio avviene in una sola esecuzione. Tuttavia, ogni 10 e-mail aspetta 5 secondi. Puoi modificare questo limite. Fammi sapere se ti va bene!
PHP:
<?php
// definisci il nome del file database
$database = 'emails.txt';

// definisci i dati del messaggio
$from = '[email protected]';
$subject = 'Messaggio di prova';
$message = 'Questo è solo un messaggio per provare lo script di invio e-mail di massa.';

// controlla che il database esista
if(!file_exists($database))
	die('Impossibile trovare il database. Controlla il percorso e riprova.');

// ottiene i dati del file
$emails = file($database);

// imposta il counter
$count = 0;

// cicla le linee nel file
foreach($emails as $line => $text)
{
	// tenta di inviare l'e-mail
	if(mail($text, $subject, $message, "From: {$from}"))
	{
		// visualizza il messaggio di avvenuto invio
		echo "Messaggio inviato correttamente a <b>{$text}</b>! <br />";
	}
	else
	{
		// visualizza il messaggio di errore
		echo "Impossibile inviare il messaggio a <b>{$text}</b>! <br />";
	}
	
	// se questa e-mail è multiplo di 10
	if($count % 10 == 0)
	{
		// attende per 5 secondi
		sleep(5000);
	}
	
	// incrementa il counter
	$count++;
}
?>
 
Ultima modifica:

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Domani testo lo script cosi come lo hai costruito tu visto l'ora e le batterie quasi esaurite e farò sapere. Grazie
 

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Ho modificato lo script in questo modo:
PHP:
// definisci il nome del file database
$dbase = $_POST["dbase"];
$db = 'db/'."$dbase".'.txt';

// definisci i dati del messaggio
$from = $_POST["mittente"];
$subject = $_POST["oggetto"];
$message = $_POST["messaggio"];

// controlla che il database esista
if(!file_exists($db))
    die('Impossibile trovare il database. Controlla il percorso e riprova.');

// ottiene i dati del file
$emails = file($db);

// imposta il counter
$count = 0;

// cicla le linee nel file
foreach($emails as $line => $text)
{
    // tenta di inviare l'e-mail
    if(mail($text, $subject, $message, "From: {$from}"))
    {
        // visualizza il messaggio di avvenuto invio
        echo "Messaggio inviato correttamente a <b>{$text}</b>! <br />";
    }
    else
    {
        // visualizza il messaggio di errore
        echo "Impossibile inviare il messaggio a <b>{$text}</b>! <br />";
    }
    
    // se questa e-mail è multiplo di 10
    if($count % 30 == 0)
    {
        // attende per 5 secondi
        sleep(5000);
    }
 
    // incrementa il counter
    $count++;
}

i dati vengono recuperati da un form, il cui codice è:
HTML:
    <form method="POST" enctype="multipart/form-data" action="send.php">
    <label>E-mail Mittente</label><br />
    <select name="mittente">
    <option value="[email protected]">Marketing</option>
    <option value="[email protected]">Mio sito</option>
    <option value="...">...</option>
    </select><br />
    <br />
    <label>Nome del database</label><br />
    <input type="text" size="50" name="dbase"><br />
    <br />
    <label>Oggetto</label><br />
    <input type="text" size="50" name="oggetto"><br />
    <br />
    <label>Testo e-mail</label><br />
    <textarea name="messaggio" rows="30" cols="80"></textarea><br />
    <br />

    <input type="submit" value="invia messaggio">
    </form>

Ora il mio problema è che dal file di testo che corrisponde alla variabile $db devo recuperare le email presenti che sono nella colonna 7
(campi: id|ente|responsabile|indirizzo|cap|citta|prov|email|sito|)

Non ho molta dimestichezza con foreach e quindi non so come agire.
Credo che bisogna usare explode ma partendo da quale variabile? Ho usato $text
...
PHP:
foreach($emails as $line => $text)
{
      $campiriga = explode("|",$text);
      $destinatario = $campiriga[7];
...


ma mi invia solo una email e poi si blocca
 

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Mi sono un pò espressa male, in realtà non si blocca ma clicco su invia e la barra sotto che ti indica che sta caricando qualcosa arriva verso la metà e sembra fermarsi anche se continua ad esserci la clessidra.
Non gli ho dato tanto peso a questo problema perchè penso che sia un pò dovuto al fatto che non considera tutta la riga e non solo il campo email, volevo risolvere prima questo aspetto per poi verificare l'altro. Il campo email è proprio 7 appunto perchè ho considerato anche 0, altrimenti sarebbe colonna 8.
 

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Il file di testo con le email di prova sono 6 email. Ho effettuato alcune modifiche ed ora per il file di testo con le 6 email va bene. Allora ho cercato di inviare le email effettive che sono circa 100 ed è molto lento, le sto ancora inviando. Vorrei fare un tentativo di invio eliminando la parte di attesa di 2 secondi dopo 30 email. Modificando questa parte ho velocizzato la cosa.
Lo script modificato è:

PHP:
<?php
// definisci il nome del file database
$dbase = $_POST["dbase"];
$db = 'db/'."$dbase".'.txt';

// definisci i dati del messaggio
$from = $_POST["mittente"];
$subject = $_POST["oggetto"];
$message = $_POST["messaggio"];

// controlla che il database esista
if(!file_exists($db))
    die('Impossibile trovare il database. Controlla il percorso e riprova. Ritorna al <a href="mail.php">modulo</a>');

// ottiene i dati del file
$emails = file($db);

// imposta il counter
$count = 0;

// cicla le linee nel file
foreach($emails as $line => $text)
{
    $campiriga = explode("|",$text);
    $destinatario = $campiriga[7];
    // tenta di inviare l'e-mail
    if(mail($destinatario, $subject, $message, "From: {$from}"))
    {
        // visualizza il messaggio di avvenuto invio
        echo "Messaggio inviato correttamente a <b>{$destinatario}</b>! <br />";
    }
    else
    {
        // visualizza il messaggio di errore
        echo "Impossibile inviare il messaggio a <b>{$destinatario}</b>! <br />";
    }

    // se questa e-mail è multiplo di 10
    if($count > 30)
    {
        // attende per 5 secondi
        sleep(2000);
    }
 
    // incrementa il counter
    $count++;
}

?>
 

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Ho tolto dallo script del precedente messaggio la parte
PHP:
   // se questa e-mail è multiplo di 10 
    if($count > 30) 
    { 
        // attende per 5 secondi 
        sleep(2000); 
    }

e non ho più problemi con il tempo di invio. Si può anche eliminare dato che più di 100 email sono state inviate in pochi secondi.
Grazie dell'aiuto
 
Discussioni simili
Autore Titolo Forum Risposte Data
M [PHP] Problema script ricezione e invio posta... PHP 1
Punix [PHP] problema script invio e-mail PHP 2
L problema invio newsletter con script proprio in php PHP 10
D Problema nell'invio dei dati di un form ad uno script AJAX Ajax 8
B Problema invio mail con script php verso i dominii libero PHP 9
K Help: problema con uno script di booking in php! PHP 0
L [PHP] Problema Script 'Not Found' PHP 4
S Problema con script php-javascript PHP 2
P immagine responsive problema con script jquery jQuery 0
C Problema script php PHP 2
C Problema script php PHP 1
T Problema Semplice Script Javascript 1
A Problema con Script js Javascript 1
A Problema script e consigli PHP 6
francesco7 [Problema] esecuzione script Upload file in php PHP 0
2 Problema script jQuery 9
P Problema inserimento controllo su script multiupload... PHP 2
Pi3tro [Problema]Script php PHP 1
S Problema con 2 script nella stessa pagina Javascript 1
A Problema script statistiche PHP 2
S problema con ajax semplice login script Javascript 8
E Problema con uno script php PHP 1
P Problema con uno script Javascript 0
S Problema su script PHP 2
Emix Problema nell'integrare uno script ad un altro esisnte... Ajax 2
P Problema script conferma cancellazione Javascript 2
D problema script per visualizzare report tradedoubler PHP 1
N problema script php mysql multi upload immagini PHP 31
M problema script che forza il download PHP 0
D Problema script registrazione utente php mysql PHP 14
A fancyBox script - problema con pulsanti jQuery 2
G Problema con questo script jQuery 1
P Problema con script facebox Javascript 0
T Problema recupero dati da file [era: help script php] PHP 9
A Problema livelli tra div e script js Javascript 7
C problema con script di lista suggerimenti Javascript 3
S Problema form mail matt's script archive PHP 3
F Problema variabile in uno script jquery jQuery 2
S Problema script muro (era: alex o borgo aiutatemi) PHP 5
F Problema script php PHP 4
T problema script popup Javascript 0
G problema script .js funziona solo in home Javascript 0
A Problema con uno script js Javascript 0
T Problema con script di registrazione utenti su IE PHP 4
neo996sps Problema con query e script PHP PHP 4
SolidSnake4 problema script adsense Google AdSense 0
A Problema script mailing list Classic ASP 0
O problema con script tell a friend Javascript 3
G Problema script php PHP 0
L problema con script php PHP 6

Discussioni simili