suite à des envois de mail pour une newsletter, hotmail, msn live, yahoo et ymail ont mis en spam pour non conformité à la rfc2045
j'ai essayé avec la fonction "chunk_split(base64_encode($messhtml))" qui est conforme en tout point par la rfc2045, mais c'est normalement réservé au codage de fichier donc interprété comme du spam !
voici tout ce que ce script fait :
- transformation des caractères ascci ISO_8859-1 non supportés par quoted-printable en leurs équivalent hexadécimal (ex: "=" en "=3D" ou "é" en "=E9"
lien vers la table de conversion :
http://fr.wikipedia.org/wiki/ISO_8859-1
- des lignes de 76 caractères maxi
- le 76ème caractère doit être "=\r\n"
- il ne faut pas couper un caractère quoted-printable sur 2 lignes (ex: "=E9")
Source / Exemple :
<?php
function RFC2045_quoted_printable($str, $html)
{
if ($html==1)
{
//remplacement des caracteres en leur équivalent html
$str=htmlentities($str);
//enlevons les retours chariots et tabulations qui ne servent à rien dans le html
$str = str_replace(array("\t", "\r", "\n","\r\n" )," ",$str);
// enlever les espaces en trop qui ne servent à rien dans le html
$str = ereg_replace("[ ]+", " ",$str);
}
//echo $str;
$out = '';
//transformation en quoted printable
for ($j = 0; $j <= strlen($str) - 1; $j++)
{
//ne supporte pas l'unicode si caractère sont encodés sur 2 caractères
$char = substr ( $str, $j, 1 );
$ascii = ord ( $char );
if ( $ascii < 32 || $ascii == 61 || $ascii > 126 )
{
$char = '=' . strtoupper ( sprintf("%02X", $ascii ) );
}
$out .= $char;
}
$line = $out;
$out = '';
//coupure du texte en ligne de 76 caracteres ou plus
while ( strlen($line) >= 76 )
{
//controle si le 74eme caractere est un =
if ($line[73]=='=')
{
$out.=substr($line,0,73)."=\r\n";
$line=substr($line,73) ;
}
else {
//controle si le 75eme caractere est un =
if ($line[74]=='=')
{
$out.=substr($line,0,74)."=\r\n";
$line=substr($line,74) ;
}
else {
//remplacement du 76ème
$out.=substr($line,0,75)."=\r\n";
$line=substr($line,75) ;
}
}
}
}
$out.=$line."\r\n";
return $out;
}
//echo RFC2045_quoted_printable($message,0);
//echo RFC2045_quoted_printable($messagehtml,1);
?>
Conclusion :
merci de faire part d'améliorations à apporter
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.