Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    header mail html costruita dinamicamente

    Ciao
    sto sviluppando una piccola applicazione web in cui ad un certo punto devo prendere tutti gli indirizzi email presenti in un db e inviare una mail a ciascuno di loro...
    vorrei però evitare di inserirli nel primo parametro della funzione mail(), per evitare che siano visibili a tutti.

    Perciò pensavo, una volta fatta la query sul database, di costruire la stringa da inviare come header, e mettere gli indirizzi email nel campo Bcc.
    Ecco un breve estratto dello script
    Codice PHP:
    <?php 
    require('connessione.php');?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Untitled Document</title>
    </head>
    <body>
    <? 
    //come prima cosa interroghiamo il database per reperire tutte le mail degli iscritti
    $mail_degli_iscritti "SELECT email FROM utenti";
    $res_mail mysql_query($mail_degli_iscritti);
    while(
    $riga_mail mysql_fetch_array($res_mail)){
    //usare i corrispettivi html di < e >...racchiudono gli indirizzi mail dei destinatari da inserire nell'header della mail 
    $stringa_destinatari=htmlspecialchars("<");
    $stringa_destinatari.=$riga_mail["email"].htmlspecialchars(">");
    echo 
    $stringa_destinatari;
    }
    ?>
    </body>
    </html>
    il mio problema nasce dal fatto che se non uso la funzione
    htmlspecialchars per convertire i caratteri < e > in &lt; e &gt; per qualche motivo mi si interropme il ciclo while sulla query che "pesca" tutti gli indirizzi dal db.
    Se però trasformo < e > nei corrispettivi caratteri html,poi questi nell'header vengon inviati come &ly; e &gt;...e quindi l'header non ha la giusta sintassi e le mail in "copia carbone nascosta" - Bcc non arrivano.
    Ecco come sto costrueno la stringa dell'header
    Codice PHP:
    $header "From: Inviante <inviante@dominio.org>\n";
    //$header .= "CC: Altro Ricevente <ricevente@dominio.it>, \n";
    //gli altri riceventi li metto nel Blind Carbon Copy, in modo che non si vedano nel client di chi riceve la mail
    $header .= "Bcc: ".$stringa_destinatari."\n";

    // generiamo la stringa che funge da separatore
    $boundary "==String_Boundary_x" .md5(time()). "x";

    // costruiamo le intestazioni che specificano
    // un messaggio costituito da più parti alternative
    $header .= "MIME-Version: 1.0\n";
    $header .= "Content-Type: multipart/alternative;\n";
    $header .= " boundary=\"$boundary\";\n\n"
    Tra l'altro non so se nell'header la sinstassi <destinatario1@kkk.it>,<destinatario2@kk.it> sia corretta e sia l'unica possibile
    Come posso fare?
    grazie

  2. #2
    scusami ho sviluppato un pezzo di codice simile ma nel mio db ho email perfettamente formattate, presumo (visto che parli di < e >) che tu abbia valori tipo falsa@falsa.it <falsa@falsa.it>
    ho pulisci il db in fase di inserimento del valore delle email oppure usi una funzione che pulisc il valore della email appena estratto.
    il while che uso io e cosi (ho estrapolato la parte dei destinatari):
    while($riga = cicla($res))
    {
    $email = $riga['email'];
    $destinatari .= " $email, ";
    }
    $destinatari = substr($destinatari, 0, -1);

    mi dici per favore un formato email che tieni:
    falsa@falsa.it
    oppure
    falsa@falsa.it <falsa@falsa.it>
    questo per capire alcune cose
    http://www.perungiorno.it

  3. #3
    Ciao e grazie della risposta velocissima...
    dunque io nel db inserisco le mail nel formato
    false@false.it

    ma poi per comporre la stringa da scrivere nell'headerle trasformavo aggiungendovi < e > per cui la mail diventava <falsa@falsa.it>
    perchè pensavo che questa fosse la sintassi da mandare all'header...
    ho guardato l'header di una mail, nelle proprietà della mail stessa, con outlook express ed ho visot che la sintassi era con i segni < e >
    ma forse è proprio qui che sbaglio?

  4. #4
    io prelevo la mail pulita e non aggiungo < e > e mi funziona
    prova nel while ad accodare le email disegutio con la virgola e basta, dovrebbe andare
    io faccio cosi, togli < > e fammi sapere se va
    http://www.perungiorno.it

  5. #5
    Ora va ma nel campo CC o Bcc c'è solo l'ultima mail...
    eppure, se guardi lo script che ho messo sopra, compongo la stringa col ciclo while ed in effetti stmpaando il risultato del recordset con echo ottengo tutte le mail che ho nel db...
    perchè poi qunado passo la variabile $stringa_destinatari nell'header mi prende solo l'ultimo indirizzo????

    comq ci sitamo avvicinando alla soluzione...grazie infinite

  6. #6
    chiaro
    queste due stringhe che scrivi tu:
    $stringa_destinatari=htmlspecialchars("<");
    $stringa_destinatari.=$riga_mail["email"].htmlspecialchars(">");
    diventano
    $stringa_destinatari=""; // prima del while e non dentro
    $stringa_destinatari.=" $riga_mail["email"], "; // dentro il while
    vedrai che funziona
    inoltre fra una email e l'altra va aggiunta la virgola e dopo che esci dal while togli l'ultima virgola

    dopo il while: $stringa_destinatari = substr($stringa_destinatari, 0, -1);

    quello di seguito se ti puo servire e il mio codice ripulito dalle schifezze


    <?php
    function pubblico()
    {
    // inizio
    //
    $connetti = connessione();
    $db = scelta_db($connetti);
    $all_email = "select email from utenti where ........ ";

    $res = seleziona($all_email, $connetti);
    $num_righe = numero_righe($res);

    if($num_righe > 0)
    {
    $destinatari = "";
    $mittente = "newsletter@falsa.it";
    $oggetto = strtoupper("Newsletter ");

    while($riga = cicla($res))
    {
    $email = $riga['email'];
    $destinatari .= " $email, ";
    }
    $destinatari = substr($destinatari, 0, -1);
    $mailstyle = "<!--
    BODY {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 10px;
    color: #003366;
    }
    -->";
    $subject=$oggetto;
    $mbody="<html><body>";
    $mbody .= "<style type=\"text/css\">";
    $mbody .= $mailstyle;
    $mbody .= "</style>";

    $mbody .= "

    Se non riesce a visualizzare la news allegata, verifichi che sia abilitata la ricezione di e-mail in formato HTML.</p>";
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    $headers .= "From: ".$mittente."\r\n";
    $headers .= "To: ".$mittente."\r\n";
    $headers .= "bcc: ".$destinatari."\r\n";
    $esito = @mail($destinatari, $subject, $mbody, $headers);
    }
    //
    // fine
    if($esito===false)
    {
    echo "

    Attenzione!
    ";
    echo "Non è stato possibile notificare agli utenti esterni la pubblicazione della nuova news
    ";
    }
    ?>
    </body>
    </html>
    <?
    }
    ?>
    http://www.perungiorno.it

  7. #7
    Perfetto!!! davvero grazie 1000...
    ma mentirei se ti dicessi che ho capito perchè funziona...
    come mai
    $stringa_destinatari=""; // prima del while e non dentro
    $stringa_destinatari.=" $riga_mail["email"], "; // dentro il while
    ?
    se faccio echo subito dopo mi esce una cosa strana con alcune email ripetute...eppure poi l'invio funzinoa proprio come dovrebbe.

    Ti chiedo quest'ultima spiegazione... grazie ancora.

  8. #8
    Aspetta..
    forse ho capito...
    ho posizionato per errore l'echo dentro il ciclo...per cui mi dava dei risultati sballati...
    in più se mettevo $stringa_destinatari="";//dentro il while mi cancellava i risultati ottenuti dal precedente "giro" del ciclo...
    è così?

  9. #9
    esattamente coe hai detto
    oni volta che entravi nel ciclo riazzeravi la variabile perchescrivevi = e non .= mentre adesso salvi il precedente e ad ogni ciclo ti stampa la stringa con un email in piu. Questo perche fai echo dentro il ciclo, se fai la stampa una volta sola fuori dal ciclo avrei il risultato finale e pulito
    e stato un piacere
    alla prossima
    ciao
    http://www.perungiorno.it

  10. #10
    grazie pax_partout...
    bel nick

    sei stato preziosissimo...
    alla prossima

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.