Visualizzazione risultati 1 fino 5 di 5

Discussione: inviare email tramite newsletter in formato HTML?

  1. #1
    naturewildlife non è connesso Utente giovane
    Data registrazione
    14-08-2010
    Messaggi
    34

    Predefinito inviare email tramite newsletter in formato HTML?

    salve a tutti!

    ho trovato uno script per la creazione di una newsletter che tramite pannello di controllo invia un email a tutti gli iscritti. ma mi sono accorto dopo una prova che lo script invia le email in formato solo testo e non in html! come devo cambiare il codice per fare in modo che le email inviate siano in formato HTML ?

    questo è il codice del file che si occupa dell'invio email:

    Codice PHP:
    <?php

    include("header.php");
    include(
    "config.inc.php");
    $file = $_SERVER['PHP_SELF'];


    echo
    "
    <center><table border=1 bgcolor=
    $sfondo1 cellspacing=0 cellpadding=0 bordercolor=$bordo1 width=600>
    <td>
    <table border=1 cellspacing=0 cellpadding=2 bgcolor=
    $sfondo2 bordercolor=$bordo2 width=600>
    <td width=550><font face=verdana size=2>Pannello amministrazione</td>
    </table></td></table>"
    ;


    function
    login() {
    include(
    "config.inc.php");
    global
    $file;

    echo
    "
    <p><table border=1 bgcolor=
    $sfondo1 cellspacing=0 cellpadding=2 bordercolor=$bordo1 width=150>
    <td><form action=
    $file method=post>
    <table border=0 cellspacing=0 cellpadding=0 bgcolor=
    $sfondo2 bordercolor=$bordo2 width=150>
    <td><font size=1 face=verdana>User:</td>
    <td><input type=text name=user class=input size=15></td>
    <tr>
    <td><font size=1 face=verdana>Pasword:<br>&nbsp;</td>
    <td><input type=password name=pwd class=input size=15><br><input type=submit name=submit1 class=bottone value=Login></td>
    </table></td></table></form>"
    ;

    }


    if(isset(
    $_POST['submit1'])) {

    $db = mysql_connect($db_host, $db_user, $db_password) or die('Errore connessione database');

    mysql_select_db($db_name, $db) or die('Errore selezione database');

    if((
    $_POST['user']) && ($_POST['pwd'])) {

    $query = "SELECT admin_ID FROM admin_newsletter WHERE user = '$_POST[user]' AND password = '$_POST[pwd]'";
    $risultato = mysql_query($query);
    $num = mysql_num_rows($risultato);

    if(
    $num>0) {
    Header("Location: $file?funzione=amministrazione");

    } else {
    echo
    "<script>alert('User o password sbagliati.');</script>";
    }
    }
    }





    function
    amministrazione() {

    include(
    "config.inc.php");
    global
    $file;

    $db = mysql_connect($db_host, $db_user, $db_password) or die('Errore connessione database');
    mysql_select_db($db_name, $db) or die('Errore selezione database');

    $query = "SELECT mail FROM membri_newsletter ORDER BY membro_ID DESC";
    $ris = mysql_query($query);

    echo
    "<p>
    <form name=andrea>
    <table border=1 bgcolor=
    $sfondo1 cellspacing=0 cellpadding=0 bordercolor=$bordo1 width=600>
    <td>
    <table border=1 cellspacing=0 cellpadding=2 bgcolor=
    $sfondo2 bordercolor=$bordo2 width=600>
    <td align=middle><a href=admin.php?funzione=cambia_pwd><font size=1 face=verdana>Cambia dati d'accesso</a></td>
    <td align=middle><a href=admin.php?funzione=crea_newsletter><font size=1 face=verdana>Crea una newsletter</a></td>
    <td align=middle><font size=1 face=verdana>Invia a: <select name=lista onChange = \"self.location = document.andrea.lista[document.andrea.lista.selectedIndex].value;\">\n
    ><option selected> ------ </option>"
    ; while($array = mysql_fetch_array($ris)) {
    echo
    "<option value=admin.php?funzione=crea_newsletter&indirizzo=$array[mail]>$array[mail]</option>";
    }
    echo
    "</select></td></table></td></table></form>";

    }




    function
    cambia_pwd() {

    include(
    "config.inc.php");
    global
    $file;

    amministrazione();

    echo
    "<p><font size=2 face=verdana>Inserisci il nuovo username e la nuova password.</font><p><form action=$file method=post>
    <table border=1 bgcolor=
    $sfondo1 cellspacing=0 cellpadding=2 bordercolor=$bordo1 width=150>
    <td>
    <table border=0 cellspacing=0 cellpadding=1 bgcolor=
    $sfondo2 bordercolor=$bordo2 width=150>
    <td><font size=1 face=verdana>User:</td>
    <td><input type=text name=user2 class=input size=15></td>
    <tr>
    <td><font size=1 face=verdana>Pasword:<br>&nbsp;</td>
    <td><input type=password name=pwd2 class=input size=15><br><input type=submit name=submit2 class=bottone value=Cambia></td>
    </table></td></table></form>"
    ;
    }

    if(isset(
    $_POST['submit2'])) {
    $db = mysql_connect($db_host, $db_user, $db_password) or die('Errore connessione database');
    mysql_select_db($db_name, $db) or die('Errore selezione database');

    $query = "UPDATE admin_newsletter SET user = '$_POST[user2]', password = '$_POST[pwd2]' WHERE admin_ID = '1'";
    $ris = mysql_query($query);

    if(
    $ris) {
    echo
    "<font size=2 face=verdana><br>I dati sono stati aggiornati in: User: <strong>$_POST[user2]</strong> - Password: <strong>$_POST[pwd2]</strong> <br>Rifai il login.</font>";
    } else {
    echo
    "Errore durante il cambiamento dei dati!";
    }
    }


    function
    crea_newsletter() {

    include(
    "config.inc.php");
    global
    $file;

    amministrazione();

    $query = "SELECT * FROM indirizzi";
    $risultato = mysql_query($query);

    if(
    $_GET['indirizzo'] != "") {

    $query3 = "SELECT indirizzi_ID FROM indirizzi WHERE indirizzi = '$_GET[indirizzo]'";
    $risultato3 = mysql_query($query3);
    $num = mysql_num_rows($risultato3);

    if(
    $num != 0) {
    echo
    "<script>alert('L'indirizzo è già stato selezionato!')</script>";

    } else {


    $query2 = "INSERT INTO indirizzi(indirizzi_ID, indirizzi) VALUES(null, '$_GET[indirizzo]')";
    $risultato2 = mysql_query($query2);
    Header("Location: $file?funzione=crea_newsletter");
    }
    }


    if(
    $_GET['cancella'] != "") {
    $query = "DELETE FROM indirizzi WHERE indirizzi = '$_GET[cancella]'";
    $risultato = mysql_query($query);
    Header("Location: $file?funzione=crea_newsletter");
    }

    echo
    "
    <center><p><table border=1 bgcolor=
    $sfondo1 cellspacing=0 cellpadding=2 bordercolor=$bordo1 width=600>
    <td><form action=
    $file?funzione=crea_newsletter method=post>
    <table border=0 cellspacing=0 cellpadding=1 bgcolor=
    $sfondo2 bordercolor=$bordo2 width=600>
    <td><font size=1 face=verdana>Oggetto:</td>
    <td><input type=text name=oggetto class=input size=99></td>
    <tr>
    <td valign=top><font size=1 face=verdana>Messaggio:<br>&nbsp;</td>
    <td><textarea name=messaggio class=input cols=99 rows=20></textarea><br><input type=submit name=submit3 class=bottone value=Invia></td>
    <tr>
    <td>&nbsp;</td>
    <td><font size=1 face=verdana><strong>Opzioni per l'invio</strong><br>
    <input type=checkbox name=tutti>&nbsp;Invia a tutti.<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*Invia a: <strong>"
    ; while($array = mysql_fetch_array($risultato)) { echo"$array[1] <a href=\"admin.php?funzione=crea_newsletter&cancella=$array[1]\"><img src=\"png.findicons.com/files/icons/1156/fugue/16/mail_minus.png\" align=\"absmiddle\" title=\"togli\"></a>&nbsp;|&nbsp; "; } echo"</strong><br><br>* Se vuoi inviare la newsletter a tutti gli iscritti
    seleziona l'opzione \"Invia a tutti\", altrimenti tramite il menu a tendina in alto scegli i destinatari e lascia deselezionata l'opzione \"Invia a tutti\".</td>
    </table></td></table></form>"
    ;


    if(
    $_POST['submit3'] && $_POST['messaggio'] && $_POST['oggetto']) {

    if(
    $_POST['tutti']) {
    $query = "SELECT * FROM membri_newsletter";
    $risultato = mysql_query($query);

    $query2 = "SELECT membro_ID FROM membri_newsletter";
    $risultato2 = mysql_query($query2);
    $num = mysql_num_rows($risultato2);



    $messaggio_formattato = $_POST['messaggio'];

    $mess = <<<EOMESS
    $messaggio_formattato
    EOMESS
    ;

    for(
    $i=0;$i<$num;$i++) {

    $mail = mysql_result($risultato, $i, 'mail');


    $invio = mail("$mail", "$_POST[oggetto]", "$mess", "From: $mail_admin");

    }

    if(
    $invio) {
    echo
    "<script>alert('Newsletter inviata con successo');</script>";

    }
    } else {

    $query = "SELECT * FROM indirizzi";
    $risultato = mysql_query($query);

    $query2 = "SELECT indirizzi_ID FROM indirizzi";
    $risultato2 = mysql_query($query2);
    $num = mysql_num_rows($risultato2);



    $messaggio_formattato = $_POST['messaggio'];

    $mess = <<<EOMESS
    $messaggio_formattato
    EOMESS
    ;

    for(
    $i=0;$i<$num;$i++) {

    $mail = mysql_result($risultato, $i, 'indirizzi');
    $invio = mail("$mail", "$_POST[oggetto]", "$mess", "From: $mail_admin");

    }

    if(
    $invio) {
    echo
    "<script>alert('Newsletter inviata con successo');</script>";
    $query = "TRUNCATE TABLE indirizzi";
    $risultato = mysql_query($query);
    }

    }
    }




    }



    switch(
    $_GET['funzione']) {

    case
    amministrazione:
    amministrazione();
    break;

    case
    cambia_pwd:
    cambia_pwd();
    break;

    case
    crea_newsletter:
    crea_newsletter();
    break;

    default:
    login();
    }


    include(
    "footer.html");
    ?>
    e questo credo sia la porzione di codice da modificare:

    Codice PHP:
    $messaggio_formattato = $_POST['messaggio'];

    $mess = <<<EOMESS
    $messaggio_formattato
    EOMESS
    ;

    for(
    $i=0;$i<$num;$i++) {

    $mail = mysql_result($risultato, $i, 'mail');


    $invio = mail("$mail", "$_POST[oggetto]", "$mess", "From: $mail_admin");

    }

    if(
    $invio) {
    echo
    "<script>alert('Newsletter inviata con successo');</script>";

    }
    } else {

    $query = "SELECT * FROM indirizzi";
    $risultato = mysql_query($query);

    $query2 = "SELECT indirizzi_ID FROM indirizzi";
    $risultato2 = mysql_query($query2);
    $num = mysql_num_rows($risultato2);
    Ultima modifica di alemoppo : 10-09-2011 alle ore 19.30.06 Motivo: Per il php, meglio usare i tag [php] :)

  2. #2
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    devi aggiungere gli headers addizionali, come in questo esempio:

    nel tuo caso:
    'Content-type: text/html; charset=iso-8859-1'

    Codice PHP:
    <?
    // To send HTML mail, the Content-type header must be set
    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

    // Additional headers
    $headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
    $headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
    $headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
    $headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

    // Mail it
    mail($to, $subject, $message, $headers);
    ?>
    più info qui:
    http://php.net/manual/en/function.mail.php
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  3. #3
    naturewildlife non è connesso Utente giovane
    Data registrazione
    14-08-2010
    Messaggi
    34

    Predefinito

    ciao e grazie per aver risposto!

    comunque, io ho modificato cosi il codice:

    Codice HTML:
    // To send HTML mail, the Content-type header must be set 
    $headers  = 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
    
    $messaggio_formattato = $_POST['messaggio'];
    
    $mess = $messaggio_formattato;
    
    for($i=0;$i<$num;$i++) {
    
    $mail = mysql_result($risultato, $i, 'mail');
    
    $invio = mail("$mail", "$_POST[oggetto]", "$mess", "From: $mail_admin", "$headers");
    
    }
    ma l'email inviata è sempre in formato solo testo! sapresti dirmi se ho sbagliato qualcosa nella modifica del codice? grazie :)

  4. #4
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Occhio, c'è un limite definito di tempo (nell'ordine dei secondi) tra l'invio consecutivo di più messaggi, quindi non puoi chiamare mail() nel for. Leggi questo mio vecchio post.

    Per quanto riguarda il problema del formato, hai sbagliato a passare i parametri alla mail(); "From" è un'intestazione, quindi va accodata a $headers:

    Codice PHP:
    $headers .= 'From: ' . $mail_admin . "\r\n";
    di conseguenza la chiamata a mail() diventa:

    Codice PHP:
    $invio = mail($mail, $_POST['oggetto'], $mess, $headers);
    Ciao!


    P.S - un consiglio: mysql_result() è lenta. Ove possibile prova a sostituirla con funzioni come mysql_fetch_assoc(), mysql_fetch_array(), ecc...
    Ultima modifica di programmazioned : 10-09-2011 alle ore 21.17.58

  5. #5
    naturewildlife non è connesso Utente giovane
    Data registrazione
    14-08-2010
    Messaggi
    34

    Predefinito

    salve Programmazioned !! ti ringrazio ora funziona perfettamente, le email adesso vengono inviate in formato html :D grazie per avermi fatto notare l'errore :)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •