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

Langage PHP Discussion :

Encodage entête mail contact pour webmail SRF [Encodage]


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Points : 69
    Points
    69
    Par défaut Encodage entête mail contact pour webmail SRF
    Bonjour à tous,

    J'ai un petit problème avec le webmail de mon client (oui, ça tombe mal).

    Alors que mes entêtes de mail sont parfaites sous gmail et thunderbird, le webmail SFR, lui, les encode mal (pas de problème pour le corps du message par contre).

    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    <?php 
    require_once "config.php"; 
    // contient Header("Content-type:text/html; charset=UTF-8"); 
     
    /* Récupération du mail destinataire dans la table societe */
    $req="SELECT idsoc, mailSoc 
    FROM societe";
     
    $result = mysql_query($req);
    $rows = mysql_fetch_assoc($result);
     
    $mailSoc = $rows['mailSoc']; 
     
     
    /* Si le formulaire est envoyé alors on fait les traitements */
    if (isset($_POST['envoye']))
    {
        /* Récupération des valeurs des champs du formulaire */
     
          $entreprise   = trim($_POST['entreprise']);
    	  $civilite		= trim($_POST['civilite']);
          $nom		    = trim($_POST['nom']);
          $expediteur	= trim($_POST['email']);
          $sujet		= trim($_POST['sujet']);
          $message		= trim($_POST['message']);
     
     
        /* Expression régulière permettant de vérifier si le format d'une adresse e-mail est correct */
        $regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';
     
        /* Expression régulière permettant de vérifier qu'aucun en-tête n'est inséré dans nos champs */
        $regex_head = '/[\n\r]/';
     
        /* Si le formulaire n'est pas posté de notre site on renvoie vers la page d'accueil */
        if($_SERVER['HTTP_REFERER'] != 'http://www.xxx.com/envoyerMessage_fr.php') {
    		echo "<script>window.location='societe_fr.php'</script>";
        }
     
        /* On vérifie que tous les champs sont remplis */
        elseif (empty($civilite) 
               || empty($nom) 
               || empty($expediteur) 
               || empty($sujet) 
               || empty($message))
        {
          $alert = 'Tous les champs précédés d\'un * doivent être renseignés';
        }
     
        /* On vérifie que le format de l'e-mail est correct */
        elseif (!preg_match($regex_mail, $expediteur)) {
          $alert = 'L\'adresse e-mail '.$expediteur.' n\'est pas valide';
        }
        /* On vérifie qu'il n'y a aucun header dans les champs */
        elseif (preg_match($regex_head, $expediteur) 
    			|| preg_match($regex_head, $entreprise) 
                || preg_match($regex_head, $nom) 
                || preg_match($regex_head, $sujet))
        {
            $alert = 'En-têtes interdites dans les champs du formulaire';
        }
        /* Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail */
        elseif (!isset($_COOKIE['sent'])) {
     
            /* Destinataire (adresse mail de la table societe) */
    		$to = $mailSoc;
     
            /* Construction du message */
            $msg  = 'Bonjour,'."\r\n\r\n";
            if ($_POST['entreprise']){
            $msg .= 'Ce mail a été envoyé depuis xxx.com_fr par '.$civilite.' '.$nom.' (entreprise : '.$entreprise.') '."\r\n\r\n";
    		}
    		else
    		$msg .= 'Ce mail a été envoyé depuis xxx.com_fr par '.$civilite.' '.$nom.' '."\r\n\r\n";
     
            $msg .= 'Voici le message qui vous est adressé :'."\r\n";
            $msg .= '***************************'."\r\n";
            $msg .= $message."\r\n";
            $msg .= '***************************'."\r\n";
     
            /* En-têtes de l'e-mail */
    		$bcc = 'xxx@gmail.com';
    		$headers = "From: $nom<$expediteur>-contact xxxx.com-\r\nBcc: $bcc\r\n";
    		$headers .='Content-Type: text/plain; charset="utf-8"'."\n";
     
            /* Envoi de l'e-mail */
            if (mail($to, $sujet, $msg, $headers)) {
                $alert = 'Votre message nous a bien été envoyé et nous vous en remercions.'.'<br/>'.'S\'il contenait une demande, nous vous répondront par e-mail.';
     
                /* On créé un cookie de courte durée (ici 120 secondes) pour éviter de renvoyer un mail en rafraichissant la page */
                setcookie("sent", "1", time() + 120);
     
                /* On détruit la variable $_POST */
                unset($_POST);
            }
            else {
                $alert = 'Erreur d\'envoi de l\'e-mail';
            }
     
        }
        /* Cas où le cookie est créé et que la page est rafraichie, on détruit la variable $_POST */
        else {
            unset($_POST);
        }
    }
    else {
    }
    ?>
    J'ai essayé plein de trucs pour $headers :
    - ajouter un MIME-Version: 1.0"."\r\n";
    - changer le Content-Type par text/html ou multipart/alternative
    - ajouter un $boundary = "-----=".md5(rand());
    - changer le charset en ISO-8859-1

    mais soit le résultat est le même, soit c'est pire comme avec le changement de charset : non seulement l'entête n'est pas mieux, mais le corps de texte est lui aussi mal encodé (aussi bien sur SRF que dans thunderbird)...

    Si quelqu'un pouvait m'aider, ce serait super sympa

  2. #2
    Membre du Club Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Points : 69
    Points
    69
    Par défaut
    Bon alors un ami m'a aidé à trouver la solution : préciser le charset et l'encodage pour le from et le sujet ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    ...
    /* En-têtes de l'e-mail */
    $bcc = 'xxx@gmail.com';
    $headers = 'From: =?UTF-8?B?' . base64_encode($nom)."?= <$expediteur>-contact xxx.com-\r\nBcc: $bcc\r\n";
    // utf-8 et base64 encode à préciser pour que ça marche tous les serveurs mails
    $headers .='Content-Type: text/plain; charset="utf-8"'."\n";	
    $sujet = '=?UTF-8?B?' . base64_encode($sujet) . "?=\n"; 
    // pour que ça encode bien le sujet aussi
     
    /* Envoi de l'e-mail */
    ...
    ?>
    J'espère que cela pourra servir à d'autres

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/07/2013, 18h06
  2. Problème mail pour webmail free
    Par Azharis dans le forum Langage
    Réponses: 3
    Dernier message: 15/10/2010, 16h52
  3. [Mail] Probleme pour l'envoi de mails avec mime
    Par tof91 dans le forum Langage
    Réponses: 1
    Dernier message: 09/03/2006, 16h44
  4. Réponses: 1
    Dernier message: 03/12/2005, 16h17
  5. Réponses: 1
    Dernier message: 14/10/2005, 22h14

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