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 :

Envoi d'un mail et retour à la ligne


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut Envoi d'un mail et retour à la ligne
    Bonjour,

    J'ai un formulaire contenant un textarea.

    Lorsque j'envoie le contenu par mail, j'utilise la syntaxe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $message_html = nl2br(htmlentities($message_html));
    Cependant, dans mon mail, les <br /> s'affichent.

    Qu'ai-je râté?

    Merci bcp
    Xavier

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    si vous n'avez rien indiqué de spécial, le message sera envoyé sous forme de texte et pas en html.
    si vous avez besoin d'envoyer un e-mail plus évolué, avec une partie en html ou avec des pièces jointes par exemple, je vous conseille d'utiliser cette bibliothèque :
    https://github.com/PHPMailer/PHPMailer

  3. #3
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    j'ai une fonction qui crée un mail avec les headers et compagnie pour le formatter en HTML et gérer les pièces jointes.
    Xavier

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    tu ne donnes pas le code de ta fonction. Cela dit, la bibliothèque phpmailer conseillée par mathieu fait bien les choses...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Voici la fonction que j'utilise:

    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
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    $message_html = nl2br(htmlentities($message_html));
     SendEmailwidthJoin($message_txt="",$message_html,$destinataire,$expediteur,$targetFile,$objet,$replyTo="" );
     
     
    function SendEmailwidthJoin($message_txt,$message_html,$destinataire,$expediteur,$fichiersAJoindre,$objet,$replyTo="" ) {
     
     
      //=== vérifier et préparer les pieces jointes:
      $arrayFiles=array();
     
      //si c'est un fichier seul sur le serveur
      if (is_string($fichiersAJoindre)){
        $lesFichiers[] = FilePathToArray($fichiersAJoindre);
      }
     
      //si c'est un tableau de x fichiers joints sur le serveur
      if (is_array($fichiersAJoindre)){
     
     
        if ((isset($fichiersAJoindre[0])) AND (is_string($fichiersAJoindre[0])) ){
          //un array simple avec des strings
          foreach($fichiersAJoindre as $stringFile){
            $lesFichiers[]= FilePathToArray($stringFile);
          }
        }
        //si x fichiers de type $_FILES (cas le + courrant)
        else {
          foreach($fichiersAJoindre as $arrayFiles){
            // si le champ est vide, on saute le tour
            if($arrayFiles['error'] == 4)
              continue;
            else {
              $aboutFile=pathinfo($arrayFiles['name']);
              $lesFichiers[]=array(
                'chemin' => getenv('TMP')."/".$arrayFiles['tmp_name'],
                'nom' => $aboutFile['filename'],
                'extension'=>$aboutFile['extension'],
                'mimeType'=> mime_content_type(getenv('TMP')."/".$arrayFiles['tmp_name']), // cf. prealable
                'contenu' => chunk_split(base64_encode(file_get_contents($arrayFiles['tmp_name'])))
              );
            }
          }
        }
      }
     
     
      //===générer les délimiteurs dans l'email ===
      do {
        $leRand=md5(rand());
        $boundary = "-----=".$leRand;
      }
      while(!strpos($message_txt.$message_html, $leRand) === false);
     
      do {
        $leRand=md5(rand());
        $boundary_alt = "-----=".md5(rand());
        $isOK=true;
        foreach($lesFichiers as $fichier){
          if(!strpos($fichier['contenu'], $leRand) === false){
            $isOK=false;
          }
        }
      }
      while($isOK==false);
     
      //=== le type de retour à la ligne ===
      if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $destinataire)) {
        $passage_ligne = "\r\n";
      }
      else{
        $passage_ligne = "\n";
      }
     
      //=== header ===
      $headers ="From: ".$expediteur.$passage_ligne;
      if ($replyTo=="") {
        $headers.= "Reply-to: \"".$expediteur."\"".$passage_ligne;
      }
      else {
        $headers.= "Reply-to: \"".$replyTo."\"".$passage_ligne;
      }
     
      $headers.= "MIME-Version: 1.0".$passage_ligne;
      $headers.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"".$boundary."\"".$passage_ligne;
     
      //=====Création du message.
      $message = $passage_ligne."--".$boundary.$passage_ligne;
      $message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"".$boundary_alt."\"".$passage_ligne;
     
     
      //=====Ajout du message au format HTML.
      if ($message_html!=""){
        $message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
        $message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
        $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
        $message.= $passage_ligne.$message_html.$passage_ligne;
     
        $message_default = "</br></br>Si acc&egrave;s &agrave; l'intranet, r&eacute;pondre directement dans le dossier</a>";
        $message_default .= "</br></br>Si pas d'acc&egrave;s &agrave; l'intranet, r&eacute;pondre par email en conservant le num&eacute;ro de dossier en objet";
        $message.= $passage_ligne.$message_default.$passage_ligne;
     
        //On ferme la boundary alternative.
        $message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
      }
      //==========
     
      //pièces jointes
      foreach($lesFichiers as $fileArray)
      {
        $message.= $passage_ligne."--".$boundary.$passage_ligne;
        $message.="Content-Type: ".$fileArray['mimeType']."; name=\"".$fileArray['nom'].".".$fileArray['extension']."\"".$passage_ligne;
        $message.="Content-Transfer-Encoding: base64".$passage_ligne;
        $message.="Content-Disposition: attachment; filename=\"".$fileArray['nom'].".".$fileArray['extension']."\"".$passage_ligne;
        $message.= $passage_ligne.$fileArray['contenu'].$passage_ligne.$passage_ligne;
      }
      $message.= $passage_ligne."--".$boundary."--".$passage_ligne;
     
      //Et envoi du mail...
      mail($destinataire, "$objet", $message, $headers);
    }
    Xavier

Discussions similaires

  1. Envoi de mails en format texte et retours à la ligne
    Par wd_newbie dans le forum Langage
    Réponses: 3
    Dernier message: 25/04/2015, 10h02
  2. [MySQL] Envoi de mail : Retour à la ligne
    Par Judgelolo dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 31/07/2012, 19h41
  3. Envoi Mail via formulaire WEB (retour à la ligne)
    Par tyim62 dans le forum Langage
    Réponses: 1
    Dernier message: 02/07/2012, 11h22
  4. problème de retour à la ligne dans un envoi de mail
    Par PAYASS59 dans le forum Langage
    Réponses: 1
    Dernier message: 26/03/2010, 16h48
  5. Réponses: 4
    Dernier message: 01/10/2005, 13h52

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