Spedisci mail dal tuo server e Yahoo ti causa problemi in ricezione? La casella di posta del mittente non riceve i messaggi inviati dal tuo sito web o script in php? Ecco come ho risolto il problema “554 Message not allowed – Headers are not RFC compliant” riportato in tutti i log dei messaggi inviati a caselle di posta Yahoo.it!
Come chiaramente riporta l’errore, risulta subito evidente che il problema è legato alla funzione in PHP che viene utilizzato per l’invio dei messaggi. In particolare l’attenzione deve essere concentrata sulle informazioni inviate negli Headers, bisogna sapere che alcuni di essi vengono impostati in modo del tutto automatico dalla funzione mail() di php e quindi, una dichiarazione duplicata di tali headers, fa nascere il problema! Probabilmente Yahoo e altri gestori di posta elettronica utilizzano dei sistemi di controllo secondo i quali questo messaggio con headers sballati era considerato frode, spam o semplicemente non conforme e veniva rimbalzato!
La porzione di codice che ho dovuto analizzare era la seguente, come potete vedere sono evidenziate due righe che rappresentano la causa del male! Erroneamente è stato impostato, nella stringa degli headers, sia il “From” che “Subject” ma la funzione mail() di php esegue in automatico tale operazione. Questo rende obbligatoria la modifica di questa porzione di codice, eliminando le righe interessate in modo opportuno!
$subject = “Comunicazione periodica”;
$header = “From: <$email_from>\r\n”; //<—— PROBLEMA 1
$header .= “Subject: “.$subject.”\r\n”; //<—— PROBLEMA 2
$currDate=date(“D, d M y H:i:s O”);//DATE_RFC822
$header .= “Date: “.$currDate.”\r\n”;
$header .= “MIME-Version: 1.0\r\n”;
$header .= “Content-Type: text/html; charset=\”iso-8859-1\”\r\n”;
$header .= “Content-Transfer-Encoding: 7bit\r\n”;
$subject = “Comunicazione periodica”;
$header = “From: <$email_from>\r\n”; //<—— PROBLEMA 1
$header .= “Subject: “.$subject.”\r\n”; //<—— PROBLEMA 2
$currDate=date(“D, d M y H:i:s O”);//DATE_RFC822
$header .= “Date: “.$currDate.”\r\n”;
$header .= “MIME-Version: 1.0\r\n”;
$header .= “Content-Type: text/html; charset=\”iso-8859-1\”\r\n”;
$header .= “Content-Transfer-Encoding: 7bit\r\n”;
Dopo la modifica
$subject = “Comunicazione periodica”;
$currDate=date(“D, d M y H:i:s O”); //DATE_RFC822
$header .= “Date: “.$currDate.”\r\n”;
$header .= “MIME-Version: 1.0\r\n”;
$header .= “Content-Type: text/html; charset=\”iso-8859-1\”\r\n”;
$header .= “Content-Transfer-Encoding: 7bit\r\n”;
$subject = “Comunicazione periodica”;
$currDate=date(“D, d M y H:i:s O”); //DATE_RFC822
$header .= “Date: “.$currDate.”\r\n”;
$header .= “MIME-Version: 1.0\r\n”;
$header .= “Content-Type: text/html; charset=\”iso-8859-1\”\r\n”;
$header .= “Content-Transfer-Encoding: 7bit\r\n”;
La modifica, nel mio caso e fino ad ora ha sortito un effetto positivo consentendo la ricezione di messaggi su caselle Yahoo. Sicuramente in futuro bisognerà adattare il server/codice ad ulteriori misure di sicurezza che verranno adottate dai gestori, ma fino ad allora non avrete problemi.