invio email programmato...

kOkA

Nuovo Utente
14 Nov 2010
9
0
0
Brindisi
www.goldenappleweb.com
salve sono un novellino del webdesing in genere ma sopratutto di php e mi sto creando uno script che invia email in una determinata data in automatico, per fare ciò ho pensato di realizzare questo script in questo modo:

1 creare un form html che inserisca dei dati tipo email e una data di scadenza (data in formato mysql YYYY-MM-DD) e questo primo passo è stato risolto e gira tutto bene

2 creare lo script che controlli giornalmente ( utilizzo crontab ) i dati inseriti in questa tabella creata appositamente in un db mysql.

ecco nella creazione di questa seconda parte di script mi sono inceppato, ho realizzato tutto sino al punto del controllo della data, quindi ho usato questa ipotesi avendo creato una variabile e avedo detto che questa variabile è uguale alla data odierna ho creato una query al db che interroga sta tabella e ho detto nella query utilizzando il paramentro SELECT seleziona email quando la data=$variabile, fino a qui penso di esserci riuscito il problema me lo pongo adesso so che perinviare email si usa la funzione mail ma come faccio a dire prendi da quella tabella il campo email quando si verifica questa condizione ben precisa e invia questo messaggio?

spero di essere stato chiaro, posto parte del codice da me creato sperando di avere aiuto da qualcuno di voi....


<?php

$link = mysql_connect('host', 'user', 'pass');
if (!$link) {
die ('Non riesco a connettermi: ' . mysql_error());
}

$db_selected = mysql_select_db('database', $link);
if (!$db_selected) {
die ("Errore nella selezione del database: " . mysql_error());
}

$var = (date("y-m-d"));

$query = "SELECT * FROM ". tabella ." email WHERE data=$var";

$result = mysql_query($query);

if (!$result) {

die("Errore nella query $query: " . mysql_error());


sino a qui gira, ora non so come continuare vi posto cosa ho provato senza avere il risultato ottenuto cioè ricevere la mail lanciando lo script perchè la cosa che mi risulta difficile e far inserire il destinatario dell'email prendendo l'indirizzo dalla tabella mysql in quella condizione ben precisa...ovviamente il tutto è continuanto

} else {


$headers = "Da: Esempio <[email protected]>\r\n";
while (list($destinatario) = mysql_fetch_row($query))
$oggetto ="prova di email";
$info="questa è una prova di email generata automaticamente";
mail ($destinatario, $oggetto, $info, $headers);

echo 'email inviata correttamente<br><br><a href="LINK">Torna alla HomePage</a> ';

}


?>

spero di non avere scritto assai baggianate e che qualcuno mi sappia aiutare...
 
Tutto sommato il tuo script è molto pulito, e migliore di molti altri che ho visto, nonostante tu sia un neofita. Comunque il problema si può risolvere con un ciclo while. Non ho idea di come sia strutturata la tabella, ma devi fare una cosa del genere:
PHP:
while($row = mysql_fetch_assoc($result))
{
    /*
    adesso in $row hai un array che contiene per indici
    i nomi dei campi e per valori i relativi valori.
    a questo punto, dunque, dovresti mandare la e-mail
    */
}
 
grazie..

grazie per il complimento o almeno per me è un complimento.... cmq la tabella è strutturata cosi facendo è una comune tabella che ha come chiave primaria ID poi ci sono i seguenti campi utente email servizio e data tutti i campi sono VARCHAR 255 e solo la data è in formato date mysql ( yyy-mm-dd ) quindi devo sostituira nel mio vecchi codice while (list($destinatario) = mysql_fetch_row($query)) con while($row = mysql_fetch_assoc($result)) ovviamente da mettere al destinatario della email ovviamente tipo una cosa cosi:

$destinatario="while($row = mysql_fetch_assoc($result))"

grazie in anticipo...
 
Probabilmente non hai ben capito cosa intendevo. Devi fare così:
PHP:
$headers = "Da: Esempio <[email protected]>\r\n";
$oggetto = "prova di email";
$info = "questa è una prova di email generata automaticamente";

while($row = mysql_fetch_assoc($result))
	mail($row['email'], $oggetto, $info, $headers);
In questo modo invierà la stessa e-mail a tutti gli utenti di quel determinato giorno.
 
qualcosa non gira...purtroppo

<?php

$link = mysql_connect('host', 'user', 'pass');
if (!$link) {
die ('Non riesco a connettermi: ' . mysql_error());
}

$db_selected = mysql_select_db('database', $link);
if (!$db_selected) {
die ("Errore nella selezione del database: " . mysql_error());
}

$oggi = (date("y-m-d"));

$query = "SELECT * FROM ". tabella ." email WHERE scadenza=$oggi";

$result = mysql_query($query);

if (!$result) {

die("Errore nella query $query: " . mysql_error());

} else {

$headers = "Da: Esempio.com <[email protected]>\r\n";
$oggetto = "prova di email";
$info = "questa è una prova di email generata automaticamente";

while($row = mysql_fetch_assoc($result))
mail($row['email'], $oggetto, $info, $headers);

echo 'email inviata correttamente<br><br><a href="LINK">Torna alla HomePage</a> ';
}

?>

o avrò capito male quello che tu mi hai detto oppure sbaglio qualcosa ma non ricevo nessuna email dopo aver inserito tramite un form già creato e funzioante i dati nella apposita tabella mysql....grazie in anticipo.... dopo che riesco a risolvere la funziona principale dello script mi piacerebbe curarlo con dei controlli dei caratteri e aggiungendo un altea funzione ma penso non sia difficile ma una cosa alla volta...
 
Sicuramente c'è un problema in questa query:

"SELECT * FROM ". tabella ." email WHERE scadenza=$oggi";

tabella, se è una variabile come credo, deve essere scritta $tabella.
E poi "email" prima del WHERE che cosa dovrebbe rappresentare?
 
allora la query penso vada a buon fine poichè non mi da l'errore come ho scritto di fare, anche se secondo me qualcosa nella query non gira bene cmq tabella non è una variabile ma è il nome della tabella del db mysql che mi interessa interrogare... qui ho psotato tabella ma qeul tabella è sostituito con il nome reale della tabella mentre email è il nome della colonna che contiene le email e diciamo il mio intento era nella query quello di dire allo script seleziona l'email presente nel db nel campo email quando ( WHERE ) la scadenza ( altro campo presente nel db ) è uguale alla variabile $oggi penso la cosa sia semplice però fatto sta che non mi invia le email adesso provo con il ciclo while per far stampare e vediamo se va a buon fine...
 
finalmente tutto funziona...

signori grazie di tutto l'errore era nella query modificando la query come mi ha suggerito alessandro e lasciando tutto i lresto invariato lanciando lo script riconosce l'email e la invia...adesso completo lo script perchè ovviamente la emai lal ricevo da utente@hosting e non voglio compaia kosi voglio cha appaia tipo un nome prestabilito da me come posso fare ciò pensavo a sendmail...
 
headers infatti non gira... avevo pensato di usare mail con smtp cosi dovrei risolvere il problema...cmq un altra domanda, è possibile far partire l'email non il giorno stesso ma fare tipo 10 gg prima 5 prima e il giorno stesso? o è una cosa molto complessa...e poi è possibile mettere oltre al destinatario variaile con il ciclo while una email destinatario fissa oltre quella?
 

Discussioni simili