• User

    non è vero che gli resta solo mysql

    puo salvare le email una per riga e leggere il file una riga alla volta
    oppure separare le mail con un codice specifico che di sicuro non troverà nelle mail e leggere il file fare un explode e avere cosi un array con tutte le mail

    quindi ora come ce lhai il file di testo??


  • User Attivo

    allora...
    nel mio file di testo mail.txt le mail sono scritte così:

    maillibero.it
    mail2libero.it
    mail3tiscali.it

    una sotto l'altra così. in realtà ho un file php già + o - fatto ma non funziona non so perchè. l'ha fatto il mio prof...
    lo posto qui così magari qualcuno può darmi una mano e lo corregge...
    grazie!
    ah, il file php.html sarebbe la pagina html da inviare...
    ecco cmq il codice php:

    <?php
    $mitt=$_POST["from"];
    echo $mitt . "<br>";
    $destin=$_POST["to"];
    echo $destin . "<br>";
    $ogg=$_POST["oggetto"];
    echo $ogg . "<br>";
    //leggo i destinatari da un file esterno
    $myFile = "mail.txt";
    //controlliamo che il file esista
    if (file_exists($myFile)) { //se il file esiste. è booleana, risp TRUE o FALSE
    //se esiste, copia il contenuto del file in una stringa.
    //se esiste dobbiamo dargli una serie di istruzioni
    $fp = fopen($myFile, "r"); //apre il file. gli dico il nome del file. "r" significa apri il file in sola lettura, read only. ci sono una serie di altre modalità: w (write) con sostituzione del file: scrivo ma cancello quello che c'era dentro, a (appened) vado ad appendere, scrivo dall'ultima riga in poi senza distruggere quello che c'è dentro. in questo caso dobbiamo solo leggere.
    //fopen legge il file e restituisce una variabile che si chiama fp. è un PUNTATORE (contiene l'indirizzo della variabile), cioè contiene l'indirizzo di memoria codificato della locazione iniziale del file aperto: puntatore perchè punta all'inizio del file.
    //finora in questo modo gli ho detto se il file esiste, aprilo
    //devo leggere il contenuto del file, concatenare i contenuti, creare una stringa che verrà restituita al file.
    //utilizzo la funzione fgets alla quale applico l'indirizzo del file. lui mi va a prendere la prima riga del file, il primo indirizzo email, che viene immagazzinato nella stringa $current_line
    $current_line = fgets($fp);
    //ora mi vado a settare la variabile $dest. in php per fare una lista di mail non si usa ; ma ,
    $destin=$current_line.","; //abbiamo preso la prima mail $current_line e l'abbiamo concatenato con una virgola. finora ho estratto il primo destinatario
    //la sintassi di questa funzione fgets dice che devo prendere la prima riga e poi con un ciclo while devo andare a leggere tutte le altre. la funzione fgets non ha bisogno dell'incremento. legge la riga che trova e passa direttamente al successivo. quindi nel while non ci sarà bisogno dell'incremento perchè è la funzione fgets che passa in automatico alla riga di memoria successiva
    //la funzione feof è una funzione booleana che mi dice se ho raggiunto la fine del file. se all'indirizzo $fp il file incontra la fine
    while (!feof($fp)){
    $current_line = fgets($fp);
    $destin=$destin. $current_line . ",";
    } //finchè non ho raggiunto la fine del file rileggo la linea corrente e la vado ad aggiungere alla variabile $destin che ho settato prima. in questo modo quando il while sarà finito, avrò settato nella variabile $destin tutti i destinatari. così legge, concatena...
    // a questo punto ho una variabile che contiene tutti gli indirizzi separati da una virgola. tramite il while ora $fp contiene il puntatore all'ultima locazione di memoria del file.
    fclose($fp); //chiude il file
    echo $destin; //fa vedere a schermo tutti gli indirizzi di posta separati da una virgola
    //ho estratto tutti gli indirizzi dal file, li ho concatenati in una stringa, ora devo inviare la mail.
    $headers = "From: <$mitt>\n"; //inserisco nell'headers il mittente
    $headers .= "Content-type: text/html; charset=iso-8859-1\n"; //assegno come linguaggio l'html e come caratteri quelli occidentali. /plane è la variante di html per i caratteri ascii

    $myMail = "php.html"; //la pagina html da inviare
    //controlliamo che il file esista
    if (file_exists($myMail)) { //se il file esiste. è booleana, risp TRUE o FALSE
    $handle = fopen($myMail, "r");
    //non mi serve la funzione fgets perchè non devo leggere le righe una per una. uso la funzione fread che riceve due parametri: $handle che riceve l'indirizzo della posizione del file, il puntatore. il secondo parametro filesize di myfile che è una funzione che, applicata al nome del file, mi restituisce la grandezza totale in byte del file. il fatto che ci metto la grandezza serve per dire che magari voglio che prenda solo i primi 4 kb. potrei aprirne solo un pezzo. mentre per aprirlo tutto devo sapere quanto pesa. e la grandezza totale si ricava con la funzione filesize.
    $mess = fread($handle, filesize($myMail)); //$mess è la variabile di ritorno, il contenuto del file. se fopen apre, fread legge. il contenuto della lettura viene messo nella variabile $mess. alla fine dell'operazione $mess conterrà tutto il contenuto del file.
    fclose($handle);//chiudi il file. la variabile $handle che conterrà il puntatore alla fine del file
    }//cioè, se il file esiste, lo apri, lo leggi e lo chiudi
    $headers = "From: <$mitt>\n"; //inserisco nell'headers il mittente
    $headers .= "Bcc: <$destin>\n";
    $headers .= "Content-type: text/html\n";
    $headers .= "charset=iso-8859-1\n";
    //a questo punto mando la mail. adesso la variabile $mess contiene tutto il file che ho letto

    if(mail("", $ogg, $mess, $headers)){ //il mittente è contenuto nell'headers
    echo "<br/>invio avvenuto con successo.";
    }
    else{
    echo "<br/>errore: e-mail non inviata.";
    }
    }
    ?>

    grazie!


  • User

    $handle = fopen("/tmp/inputfile.txt", "r");
    while (!feof($handle)) {
    $buffer = fgets($fd, 4096);
    echo $buffer;
    }
    fclose($handle);

    questo è come si legge un file di testo riga per riga
    il codice del prof con tutto quella schifezza di commenti non lo leggo nemmeno
    pero partendo come si legge un file in maniera corretta puoi arrivare mandare la mail
    in caso se non riesci posta solo il codice senza i commenti del tuo prof 😄
    ciauz


  • User Attivo

    ma questo è per leggere il file con le mail?
    forse quello funziona perchè all'inizio del codice la variabile $destin ha un echo e quando provo a inviare, mi scrive a video tutte le mail del file di testo, quindi non credo sia quello il problema. xò poi mi da l'else dell'ultimo if: errore, email non inviata.
    ti posto il php senza i commenti del prof!:)
    non so, magari è un errore stupido... a lui funzionava, poi questo è quello che ha rifatto in classe e non va... boh!!!

    <?php
    $mitt=$_POST["from"];
    echo $mitt . "<br>";
    $destin=$_POST["to"];
    echo $destin . "<br>";
    $ogg=$_POST["oggetto"];
    echo $ogg . "<br>";
    $myFile = "mail.txt";
    if (file_exists($myFile)) {
    $fp = fopen($myFile, "r");
    $current_line = fgets($fp);
    $destin=$current_line.",";
    while (!feof($fp)){
    $current_line = fgets($fp);
    $destin=$destin. $current_line . ",";
    }
    fclose($fp);
    echo $destin;
    $headers = "From: <$mitt>\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\n";
    $myMail = "php.html";
    if (file_exists($myMail)) {
    $handle = fopen($myMail, "r");
    $mess = fread($handle, filesize($myMail));
    fclose($handle);
    }
    $headers = "From: <$mitt>\n";
    $headers .= "Bcc: <$destin>\n";
    $headers .= "Content-type: text/html\n";
    $headers .= "charset=iso-8859-1\n";
    if(mail("", $ogg, $mess, $headers)){
    echo "<br/>invio avvenuto con successo.";
    }
    else{
    echo "<br/>errore: e-mail non inviata.";
    }
    }
    ?>


  • User

    tanto codice inutile. allora:
    questo codice presuppone che tu abbia una pagina html in cui ci sia un form con metodo post che invia i dati alla pagina del prof. questo codice ti puo' servire se devi far spedire le email ai tuoi utenti eccetera. dimmi na cosa hai detto al prof che volevi creare un sistema di newsletters? non credo perche' a meno che il tuo prof non si aun cre**no non avrebbe prodotto codice simile -.-


  • User Attivo

    si, scusami. ho la pagina html con form e motodo post. non l'ho scritto perchè non ci ho pensato, scusami...
    non ho chiesto io al prof, lui ci ha fatto fare questo codice x inviare mail a una lista di contatti presi da un file di testo esterno e come contenuto della mail una pagina html sempre esterna.
    non si può fare proprio niente???


  • User

    qua

    mail("",

    dentro gli apici ci devi mettere a chi vuoi mandare la mail


  • User

    ah poi la tua pagine html della mail e la pagina php che invia la news lettere devono essere nella stessa cartella perchè hai messo come indirizzo del file html da leggere la stessa cartella in caso controlla dove la metti


  • User Attivo

    intanto veramente grazie infinite della pazienza che stai avendo...
    cmq tra gli apici non ho scritto niente perché i destinatari deve prenderli dal file mail.txt e metterli in bcc (sta tra gli header). quello l'ho lasciato vuoto proprio nel caso in cui mi avesse dato problemi il fatto che non avessi messo il destinatario. solo che avevo bisogno che fosse nel bcc perchè i destinatari non devono vedere anche tutte le mail degli altri...
    che faccio???


  • User

    perchè tra bbc scusa??

    a te serve inviare una mail uguale a tutti
    quindi ti va benissimo mettere tutto dentro il ciclo di lettura delle righe del file con le mail e inviare una mail alla volta ma non come copia cieca ma come mail normale
    io nel sito per cui lavoro faccio cosi
    uso il campo to: della funzione mail()

    nel tuo caso invertirei un po gli ordine del programma
    del tipo
    ad inizio file creo header messaggio e tutto cio che riguarda la mail
    poi una volta che ho questo fai l'invio della mail leggendo riga per riga il file e prendendo cosi una mail per riga


  • User Attivo

    io però ho bisogno che i destinatari non vedano tutte le mail degli altri. x questo è in bcc. cmq prima stava nel to: e non funzionava lo stesso... ci dev'essere un errore da qualche parte!!!
    mi dice sempre: errore - email non inviata...
    che tortura!!!
    non conosci per caso qualche altro modo o hai qualche script tu?
    x me l'importante è mandare una mail in HTML a una lista di persone...
    aiuto!!!


  • User Attivo

    io però ho bisogno che i destinatari non vedano tutte le mail degli altri. x questo è in bcc. cmq prima stava nel to: e non funzionava lo stesso... ci dev'essere un errore da qualche parte!!!
    mi dice sempre: errore - email non inviata...
    che tortura!!!
    non conosci per caso qualche altro modo o hai qualche script tu?
    x me l'importante è mandare una mail in html a una lista di persone...
    aiuto!!!


  • Bannato User Attivo

    ma lo stai provando in locale sto script di newsletter? magari semplicemente non funziona in locale perchè mail() non è attivo o ...boh, a me da locale le email non partono mai. infatti lo provo sempre sull'hosting. Provalo online mandando la NL ad un paio di tuoi indirizzi.


  • Bannato User Attivo

    in allegato lo script che ti serve, spero di aver fatto cosa utile a quanti hanno necessità di uno script di NL semplice.

    Mi raccomando provalo prima inviando ad un paio di tuoi indirizzi email.
    trucchetto:
    se hai gmail, invia la newsletter a:
    tuoindirizzo+1 gmail.com
    tuoindirizzo+2 gmail.com
    tuoindirizzo+3 gmail.com
    ...
    tuoindirizzo+N gmail.com

    arriveranno tutte a
    tuoindirizzo gmail.com


  • User

    @liamuscogiuri said:

    io però ho bisogno che i destinatari non vedano tutte le mail degli altri. x questo è in bcc. cmq prima stava nel to: e non funzionava lo stesso... ci dev'essere un errore da qualche parte!!!
    mi dice sempre: errore - email non inviata...
    che tortura!!!
    non conosci per caso qualche altro modo o hai qualche script tu?
    x me l'importante è mandare una mail in html a una lista di persone...
    aiuto!!!

    infatti non lo vedono
    perchè cmq è come se tu inviassi la stessa mail singolarmente ad ogni indirizzo perchè cmq leggi dal file di testo un indirizzo mail alla volta

    e chi la riceve è come se ricesse solo la sua mail senza poter sapere che è stata inviata anke ad altri


  • User Attivo

    grazie mille!!!
    credo sia quello che cerco, devo provarlo!
    cmq il mio codice l'avevo provato in internet, non era quello il problema...
    volevo chiederti una cosa... ma a parte modificare il codice di SendNL.php devo modificare anche qualcosa nella cartella phpmailer?
    scusa, ma non conosco bene php come si vede!
    grazie moltissime!!!


  • Bannato User Attivo

    devi modificare solo SendNL.php per settare mittente, file dei destinatari, oggetto e corpo della mail.


  • User Attivo

    funzionaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    grazie grazie grazieeeeeeeeeeee!!!!!!!!!!!!!!!!
    era proprio quello che mi serviva perfettissimo!!!!!!!!!!!!!!
    posso chiedere solo un'ultima cosa?
    la pagina html da inviare ha degli stili di testo incorporati però quando mi arriva la mail non li fa vedere ma mette tutto in times nero...
    come faccio?
    grazie ancora!!!


  • Bannato User Attivo

    è un discorso un pò più lungo e complicato, prova a vedere se ne cavi qualcosa da qui:
    alistapart.com/articles/cssemail/