Come ho già scritto più volte, gestisco una newsletter. Il testo da inviare è memorizzato in una variabile di sessione che si chiama $_SESSION['mail']['testo']. Ebbene, il procedimento è semplice: la mail viene inviata ai miei iscritti e, successivamente, viene salvata in un file di testo nell'archivio. Prima di inviarla, ovviamente, me la visualizza, cosicché io possa decidere se mandarla o coreggere alcuni errori. Ecco a voi il codice HTML di una di queste email che ho fatto di prova (i contenti non sono un granché, mi interessa la forma):
Codice HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<style type="text/css">
body {
font-family: Verdana, "Nimbus Sans L";
background-color: #FFFFFF;
}
a:link{
text-decoration:none;
}
a:visited{
text-decoration:none;
color:#0000FF;
}
a:hover{
color: #d50000;
}
p {
text-align: justify;
}
.problemi{
text-align: left;
margin-top: 50px;
margin-bottom: 30px;
}
.bloccofrase{
margin-top: 50px;
text-align: center;
}
.frase {
font-style: italic;
}
.fraseautore{
padding-left: 150px;
}
.bloccovignetta{
text-align: center;
}
.finale{
text-align: center;
margin-bottom: 20px;
}
hr {
margin-top: 75px;
margin-bottom: 75px;
}
h1 {
text-align: center;
}
h2 {
margin-bottom: 20px;
color: #660000;
}
h3 {
margin-top: 30px;
margin-bottom: 0px;
}
h4 {
margin-top: 30px;
}
</style>
</head>
<body>
<h1>Newsletter del Liceo di Lugano 1<br>16 - 22 ottobre</h1>
<p class="problemi">Hai problemi nella visualizzazione dell’email? Vai alla pagina http://lilu1.altervista.org/lilu1/Newsletter/Archivio/16_-_22_ottobre.php</p>
<ul class="calendari"><li>Per il Calendario Ebraico è la settimana del 17 - 23 Tishri 5767</li>
<li>Per il Calendario Islamico è la settimana del 16 - 22 Ramadhan 1427</li>
<li>Per il Calendario Rivoluzionario è la settimana del 17 - 23 Vendémiaire 215</li>
</ul>
<div class="bloccofrase">
<h4>Frase della settimana</h4>
<div><span class="frase">Non è tutto oro quel che luccica</span>
<div class="fraseautore">(Cicerone)</div>
<br>
</div>
</div>
<div class="bloccovignetta">
<h4>Vignetta della settimana</h4>
<div><a href="http://lilu1.altervista.org/lilu1/Newsletter/Immagini/Debian-Tux.jpg"><img src="http://lilu1.altervista.org/lilu1/Newsletter/Immagini/Debian-Tux.jpg" alt="http://lilu1.altervista.org/lilu1/Newsletter/Immagini/Debian-Tux.jpg"></a>
<br>
Debian!</div>
</div>
<h2>Indice</h2>
<ul class="indice"><li>Agenda</li>
<li>Comunicazioni</li>
<li>Attualità</li>
<li>Nuovo titolo</li></ul>
<hr>
<h2>Agenda</h2>
<h3>Lunedì 16</h3>
<ul>
<li>prova OK!</li>
</ul>
<h3>Altre segnalazioni</h3>
<ul>
</ul>
<hr>
<h2>Comunicazioni</h2>
<ul>
<li>Scrivi qui il testo</li>
<li>Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo.</li>
</ul>
<hr>
<h2>Attualità</h2>
<h3>Guerra fredda: lo scandalo continua</h3>
<div style="margin-bottom: 30px">
È successo ieri.
<br>Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo. Non se ne può più, è davvero tremendo.
</div>
<hr>
<h2>Nuovo titolo</h2>
<p>Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo. Scrivi qui il testo.</p>
<hr>
<div class="finale">
Ricevi questa newsletter perché sei iscritto al servizio newsletter del Liceo di Lugano 1. Trovi informazioni su questo servizio all’indirizzo seguente: <a href="http://www.lilu1.altervista.org/lilu1/Newsletter">www.lilu1.altervista.org/lilu1/Newsletter</a> oppure contattandoci tramite e-mail all’indirizzo <a href="mailto:lilu1@altervista.org">lilu1@altervista.org</a> o dalla pagina <a href="http://www.lilu1.altervista.org/lilu1/Contattaci.php">www.lilu1.altervista.org/lilu1/Contattaci.php</a>.<br>Per cancellare la propria iscrizione dal servizio andare alla pagina <a href="http://www.lilu1.altervista.org/lilu1/Newsletter/Formulario.php">www.lilu1.altervista.org/lilu1/Newsletter/Formulario.php</a>.<br>Vuoi iscrivere qualche amico? Vai alla pagina <a href="http://www.lilu1.altervista.org/lilu1/Newsletter/Formulario.php">www.lilu1.altervista.org/lilu1/Newsletter/Formulario.php</a>.<br>
Ricordiamo che il servizio è gratuito e senza scopo di lucro come si può notare dall’assenza di pubblicità.
</div>
<div class="finale">
<b>Inviaci materiale da aggiungere alla newsletter! Vai alla pagina <a href="http://www.lilu1.altervista.org/lilu1/Contattaci.php">www.lilu1.altervista.org/lilu1/Contattaci.php</a> oppure scrivici all’indirizzo <a href="mailto:lilu1@altervista.org">lilu1@altervista.org</a>.</b>
</div>
<br><br><br><br></body>
</html>
Come vedete, c'è la sua bella DTD, i tag al posto giusto, lo stile definito con i CSS interni, e tutto quanto. Ora, il problema è il seguente: quando io invio tramite la funzione mail() la mia newsletter, gli iscritti la ricevono, però con i caratteri di escape (i maledettissimi caratteri di escape). Quindi, al posto di un link funzionante come:
Codice HTML:
<a href="www.lilu1.altervista.org">Il mo sito</a>
viene fuori un non funzionante:
Codice HTML:
<a href=\"www.lilu1.altervista.org\">Il mo sito</a>
E questo vale per tutti i link e tutte le immagini di tutte le email ricevute da tutti i server. Inoltre, anche tutti gli altri attributi, come le classi e i testi alternativi, vengono falsati, per cui anche lo stile va a farsi benedire. Come posso fare? Il problema è a monte, sui miei script, per cui forse basterebbe una strpslashes() subito prima di inviare? Oppure è a valle, cioè i server non capiscono bene che devono fare con queste virgolette e le backslashano?
Non so se mi sono spiegato...
Aggiungo ancora solo il codice di invio, così potete controllare anche gli headers.
Codice PHP:
<?
$a = $_SESSION['mail']['a'];
$oggetto = "[Newsletter lilu1] " . $_SESSION['mail']['titolo'];
$testo = $_SESSION['mail']['testo'];
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-type: text/html; charset=iso-8859-1\r\n";
$header .= "From: Liceo di Lugano 1 <lilu1@altervista.org>";
mail($a, $oggetto, $testo, $headers_mail)
?>
(Ovviamente questo pezzo di codice è all'interno di un ciclo e viene ripetuto per tutti gli iscritti.)