begin process at 2012 05 27 20:40:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

E-Mail / Messagerie

 > TRANSFORMER DU TEXTE OU DE L'HTML EN TEXTE CONFORME À LA NORME D'ENVOI D'EMAIL RFC2045 QUOTED PRINTABLE

TRANSFORMER DU TEXTE OU DE L'HTML EN TEXTE CONFORME À LA NORME D'ENVOI D'EMAIL RFC2045 QUOTED PRINTABLE


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :E-Mail / Messagerie Classé sous :rfc2045, quoted-printable, email, mime Niveau :Initié Date de création :12/02/2010 Date de mise à jour :23/02/2010 18:35:54 Vu :3 196

Auteur : fyav

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

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

  • <?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);
  • ?>
<?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


 Historique

13 février 2010 11:32:47 :
conversion des caractères accentué en leur équivalent html avec la fonction : $str=htmlentities($str);
23 février 2010 18:35:54 :
problème dans le contrôle des 74ème et 75ème caractères pour éviter de couper un caractère quoted-printable sur 2 lignes

 Sources du même auteur

Source avec une capture GÉNÉRATEUR DE CODE BARRE EAN13
Source avec une capture GÉNÉRATEUR DE CODE BARRE CODE 39
TRANSFORMER UNE IP DYNAMIQUE EN IP FIXE EN ÉTANT DERRIÈRE UN...

 Sources de la même categorie

Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ... par cod57
Source avec Zip Source avec une capture FORMULAIRE VERS COURRIEL BASIQUE AVEC CONTRÔLE CAPTCHA ANTI ... par cod57
Source avec Zip CHAT EN PHP ET JQUERY par pitchoubrazil
Source avec Zip Source avec une capture FORMULAIRE DE CHOIX MULTI-CONTACT VALIDE XHTML 1.0 TRANSITIO... par aventurier19
Source avec Zip Source avec une capture WEB MESSENGER par EvildarkEurope

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ... par cod57
Source avec Zip Source avec une capture FORMULAIRE VERS COURRIEL BASIQUE AVEC CONTRÔLE CAPTCHA ANTI ... par cod57
Source avec Zip Source avec une capture CLASSE DE MESSAGERIE par janhsh
Source avec Zip CLASS D' ENVOIE DE MAIL EN SMTP par ImmortalPC
Source avec Zip FORMULAIRE PERMETTANT D'ENVOYER UN E-MAIL (AVEC PIÈCES JOINT... par triumphs

Commentaires et avis

Commentaire de Delphiprog le 13/02/2010 09:20:00 administrateur CS

Mouais...
Quelques suggestions ou remarques :
1 - simplification du code :
Les tableaux $arrayaccent, $arraysansaccent et l'appel de la fonction str_replace($arrayaccent, $arraysansaccent, $str) sont inutiles. Un appel à la fonction native htmlentities fera l'affaire et sera nettement plus performant.

2 - Ce code ne supporte pas l'unicode comme ici :
$char = substr ( $str, $j, 1 );
puisque certains caractères (accentués, etc.) sont encodés sur 2 caractères et non 1.

Sinon, merci de nous avoir rappelé l'existence de la RFC-2045. :)

Commentaire de winwarrior le 13/02/2010 13:01:51

Sinon (pour rappel) il y a les fonctions :
- imap_8bit (nécessite l'extension imap activée)
- quoted_printable_encode (nécessite php 5.3)

Niveau code j'ai quelques remarques à faire, il vaut mieux utiliser les fonctions preg_* plutot que ereg_* qui sont maintenant dépreciées et
for ($j = 0; $j <= strlen($str) - 1; $j++)
devient
for ($j = 0, $k = strlen($str); $j < $k; $j++)
ça évitera de recalculer la taille de $str à chaque itération
je chipote mais il y a aussi
substr ( $str, $j, 1 )
qui pourrait devenir
$str[$j]
"strtoupper ( sprintf("%02X", $ascii ) )", le strtoupper est inutile comme X veut déjà dire qu'on veut le résultat en majuscule
et une dernière chose
substr($line,73,strlen($line))
devient
substr($line,73)
la fonction substr, si tu spécifie pas de 3ème argument prend automatiquement la longueur totale de la chaine

voilà ça sera tout :-)

Commentaire de aKheNathOn le 15/02/2010 09:25:01 9/10

merci pour cette fonction bien pratique, je compte l'utiliser dans un module de newsletter

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Probleme type MIME [ par Cisaks ] Bonjour,Je ne comprend pas car lors de l'envoi d'un email j'attache un fichier qui à été prealablement uploader sur mon serveur. Après l'envoi j'ai af email incomplet club internet [ par cseagle ] Bonjour,J'ai un script classique d'envoi de newsletter html qui fonctionne très bien sauf sur club internet ou le contenu de mon mail est coupé en ple UPDATE de plusieurs tables [ par noreille79 ] J'ai un souci lors de la mise à jour (par les membres)des tables de ma base de données. Il modifie mon mot de passe même si je lui en ai pas déclaré formulaire aide please [ par sk8ter57 ] alors voial je debute en php j'aimerai creer un formulaire ou une fois ke la personne a tout rempli sa envoi vers une adresse email voici la page html Envoi d'email Multi Destinataire [ par R3dDragon ] Bonjour,J'ai une question, sa fait quelques jours que je programme mon nouveau site web, et là je tombe sur un problème, j'aimerais suite à formulaire envoyer un email à plusieurs personnes [ par soussan ] salutje veux envoyere un fichier(lettre)aux plusieurs clients .je sais pas comment est ce que je doit avoir une base de données qui contient ces adres Erreur dans un script de formulaire [ par Sven78 ] Bonjour à toutes et à tous Google m'a conduit ici quand je lui ai demandé de l'aide sur la fonction $_POST qui semble me poser problème À la base c'e envoyer email avec blat [ par lahlousimo ] bonjour,j'ai pas pu envoyer un mail avec les code source que j'ai trouvé ici ,je ne sais pas ou est le probleme , mais j'ai reussi d'envoyer un  email Erreur - unexpected T_ELSEIF [ par Frank9321 ] Bonjour,j'ai fait un petit code PHP mais la, ca me bloque. Il me dit:Parse error: syntax error, unexpected T_ELSEIF in E:\www\inscription\inscription petit probléme de redirection [ par doberman_420 ] Bonjour, Alor voila j'ai un petit soucil de redirection sur le script ci-dessous, quand je valide ma photo ou veu sortir pour ne pas mettre de photo e


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales