IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Caractères accentué pour envoi de mail


Sujet :

AJAX

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Points : 55
    Points
    55
    Par défaut [AJAX] Caractères accentué pour envoi de mail
    Bonjour,

    je souhaite implémenter l'envoi d'un message en passant par la technologie AJAX. Pour le moment, tout marche bien (les champs sont bien récupérés en JS et envoyés grâce à PHP) sauf les accents. Je les reçois sous forme de losange sous thunderbird.

    Pourtant, ma page HTML est bien déclarée en UTF-8, l'AJAX envoi les données en UTF-8, je crée un email en UTF-8 et mon thunderbird est configuré en UTF-8 !

    Est-ce que quelqu'un peut me donner un conseil ?

    Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    // Avec ce code, je récupère plusieurs champs (le titre du mail, son
    // contenu, l'adresse de celui qui l'a envoyé et l'adresse de la pièce jointe)
    function mail_ajax() {
      // Montrer le statut
      if(document.all) var information = document.all["status"];            //IE
      else             var information = document.getElementById("status"); //FF
      information.style.visibility = "visible";
     
      // Requête ajax
      var httpRequest = false;
      if(window.XMLHttpRequest) {
        httpRequest = new XMLHttpRequest();
        if(httpRequest.overrideMimeType) {
          httpRequest.overrideMimeType('text/xml');
        }
      }
      else if(window.ActiveXObject) {
        try {
          httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e) {
          try {
            httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (e) {}
        }
      }
      if(!httpRequest) {
        alert("Impossible de cr\351er une instance XMLHTTP. Veuillez r\351it\351rer votre envoi ult\351rieurement.");
    		information.style.visibility = "hidden";
        return;
      }
      try {
        httpRequest.open("POST", "../scripts/envoi_mail.php", true);
      }
      catch(e) {
        alert("L'ouverture du fichier distant a \351chou\351. Veuillez r\351it\351rer votre envoi ult\351rieurement.");
    		information.style.visibility = "hidden";
        return;
      }
     
      try {
        var categorie = document.forms[0].categorie.value;
        var titre     = document.forms[0].titre.value;
        var adresse   = document.forms[0].adresse.value;
        var contenu   = document.forms[0].corps.value;
        var pj        = document.forms[0].piece_jointe.value;
        // Remplace les & car caractère spécial pour transmission info AJAX
        contenu  = contenu.replace(/&/g,escape("&"));
        titre    = titre.replace(/&/g,escape("&"));
        titre    = titre.replace(/\r/g," ");
        titre    = titre.replace(/\n/g," ");
        adresse  = adresse.replace(/&/g,escape("&"));
        pj       = pj.replace(/&/g,escape("&"));
        var data =  "categorie="+categorie+"&titre="+titre+"&adresse="+adresse+"&contenu="+contenu+"&pj="+pj;
        httpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        httpRequest.send(data);
      }
      catch(e) {
        alert("La communication avec le fichier distant a \351chou\351. Veuillez r\351it\351rer votre envoi ult\351rieurement.");
    		information.style.visibility = "hidden";
        return;
      }
      httpRequest.onreadystatechange = function() {
        if(httpRequest.readyState == 4 && httpRequest.status == 200) {
          var reponse = httpRequest.responseText;
          switch(reponse) {
    	   case "1":
    	      alert("Le message a bien \351t\351 envoy\351, merci pour l'int\351r\352t que vous portez \340 ce site.");
      	      document.forms[0].titre.value        = "";
      	      document.forms[0].adresse.value      = "";
      	      document.forms[0].corps.value        = "";
                  document.forms[0].categorie.options[5].selected = true;
      	      document.forms[0].piece_jointe.value = "";
    	      break;
    	    case "2":
    	      alert("La pi\350ce jointe n'existe pas ou elle est trop volumineuse.");
    	      break;
    	    default:
    	      alert("Votre message n'a pu \352tre envoy\351. Veuillez r\351it\351rer votre envoi ult\351rieurement.");
          }
          document.forms[0].titre.focus();
          information.style.visibility = "hidden";
          return;
        }
      }
    }
    Puis le PHP qui reçoit cette requète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <?
    // Il y a toujours des problèmes ici
    $categorie = utf8_decode($_POST[categorie]);
    $titre     = utf8_decode($_POST[titre]);
    $adresse   = utf8_decode($_POST[adresse]);
    $contenu   = utf8_decode($_POST[contenu]);
    $pj        = $_POST[pj];
     
    $reception = "adresse@fournisseur.fr";
     
    // Entête générique
    $entete_mail  = "MIME-Version: 1.0\r\n";
    $entete_mail .= "Date: ".date("D, j M Y H:i:s O")."\r\n";
    // Entête si champs adresse mail rempli
    if($adresse!="") {
    	$entete_mail .= "Reply-To: $adresse\r\n";
    }
     
    // Mandatory for file_exists and filesize function
    clearstatcache();
     
    if($pj=="") $erreur_pj = 1; // Pas de pièce jointe
    else {
    	if(!file_exists($pj) || filesize($pj)>5242880) { // Maximum de 5Mo ou pièce inexistante
    		echo "2";
    		return;
    	}
    	$erreur_pj = 0; // Une pièce jointe
    }
     
    // Si pas de pièce jointe, mail classique
    if($erreur_pj) {
    	$entete_mail.="Content-Type: text/plain; charset=utf-8\r\n";
    	$entete_mail.="Content-Transfer-Encoding: 8bit\r\n";
    }
    // Sinon, insertion de la pièce attachée
    else {
    	include("mime_function.php");
    	$path_parts = pathinfo($pj);
    	$ext        = $type[strtolower($path_parts["extension"])];
    	$boundary   = "----=".md5(uniqid(mt_rand()));
    	$entete_mail .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n\r\n";
    	$entete_mail .= "--".$boundary."\r\n";
    	$entete_mail .= "Content-Type: text/plain; charset=utf-8\r\n";
    	$entete_mail .= "Content-Transfer-Encoding: 8bit\r\n";
    	$entete_mail .= "Content-Disposition: inline\r\n";
    	$contenu .= "\r\n\r\n--".$boundary."\r\n";
    	$contenu .= "Content-Disposition: attached\r\n";
    	if($ext=="") $ext = "application/octet-stream";
    	$contenu .= "Content-Type: ".$ext."; name=\"".$path_parts["basename"]."\"\r\n";
    	$contenu .= "Content-Transfer-Encoding: base64\r\n";
    	$contenu .= "Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"\r\n\r\n";
    	$fp   = fopen($pj, "r");
    	$file = fread($fp, filesize($pj));
    	$file = chunk_split(base64_encode($file));
    	$contenu .= $file;
    	$contenu .= "\r\n\r\n--".$boundary."--\r\n";
    }
    $status_mail = mail($reception, $categorie." - ".$titre,$contenu,$entete_mail);
     
    $status_mail = 1;
     
    echo $status_mail;
    ?>

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    as-tu lu ce tuto sur le sujet ?

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Points : 55
    Points
    55
    Par défaut
    Bonjour et merci E.Bzz,

    jusqu'à maintenant non, je ne l'avais pas lu mais maintenant c'est fait !

    Je déclare bien chaque page en UTF-8. J'utilise aussi la fonction utf8_decode(). Je pense que j'applique ce qui est dans cette page. Donc ça ne règle pas mon pb :-(

  4. #4
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Points : 55
    Points
    55
    Par défaut
    Ca y est, j'ai enfin résolu le problème :
    - il faut appeler le script avec le bon charset comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <script type="text/javascript" src="../js/ajax_mail.js" charset="UTF-8"></script>
    - plus besoin d'utiliser la fonction utf8_decode (le mail est construit et déclaré en UTF-8) comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $contenu   = $_POST[contenu];
    Merci en tout cas pour ta réponse E.Bzz.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Mail] configuration pour envoi de mail
    Par julien.63 dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2006, 08h57
  2. [Configuration] CONFIG pour envoie de mail d'un serveur local
    Par i_shinji dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 14/03/2006, 13h39
  3. [MySQL] Parcourir la liste des emails extraits de la base pour envois de mail
    Par Ylias dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/02/2006, 22h34
  4. pb pour envoi de mail
    Par taurus dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 28/11/2005, 09h51
  5. [pb de caractere] Conversion de caractères accentué pour url
    Par smyley dans le forum Général Conception Web
    Réponses: 7
    Dernier message: 04/11/2005, 15h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo