PHP: mail() e punti esclamativi

| giugno 30th, 2008

Oggi inviando email con la funzione mail() di php, per la prima volta, mi sono trovato di fronte a dei punti esclamativi (!) inseriti ad intervalli regolari all’interno del testo della mail, allora mi sono documentato ed ho scoperto che  è un limite fisico di Sendmail: una riga non può superare 990 caratteri, se questo avviene, viene interrotta con l’inserimento di un carattere di a capo (\n) e un punto esclamativo.
Per risolvere il problema ho passato alla funzione mail() il testo del messaggio codificato in base 64, base64_encode(), ed inserito nell’header del messaggio la stringa “Content-Transfer-Encoding: base64″.

Ecco un piccolo esempio:

1
2
3
<?php
mail($to,$subject,base64_encode($message),"From:<".$from.">\r\nMIME-Version: 1.0\r\nContent-type: text/html; charset=iso-8859-1\r\nContent-Transfer-Encoding: base64");
?>

In questa maniera si risolve il problema ma mi è capitato che alcuni client di posta come Libero e Gmail non vedano il testo della mail.
In conclusione, facendo riferimento allo script sopra riportato, consiglio di formattare la stringa $message passata alla funzione mail() inserendo interruzioni di riga (\n), dove è possibile, in maniera da non superare 990 caratteri. Operando in questo modo il problema non si presenta.

Link utile: http://bugs.php.net/bug.php?id=13044