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 :

Entête dans le corps de l'e-mail


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 24
    Par défaut Entête dans le corps de l'e-mail
    Bonjour,
    j'ai des problèmes avec l'envoi dans certains cas (orange, wanadoo,free) entre autres avec une partie de l'entête qui se retrouve dans le corps du mail.
    je suis hebergé chez OVH serveur linux Fedora.
    j'utilise une variante du code suivant :
    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
    <?php
    $mail = 'weaponsb@mail.fr'; // Déclaration de l'adresse de destination.
    if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues.
    {
    	$passage_ligne = "\r\n";
    }
    else
    {
    	$passage_ligne = "\n";
    }
    //=====Déclaration des messages au format texte et au format HTML.
    $message_txt = "Salut à tous, voici un e-mail envoyé par un script PHP.";
    $message_html = "<html><head></head><body><b>Salut à tous</b>, voici un e-mail envoyé par un <i>script PHP</i>.</body></html>";
    //==========
     
    //=====Lecture et mise en forme de la pièce jointe.
    $fichier   = fopen("image.jpg", "r");
    $attachement = fread($fichier, filesize("image.jpg"));
    $attachement = chunk_split(base64_encode($attachement));
    fclose($fichier);
    //==========
     
    //=====Création de la boundary.
    $boundary = "-----=".md5(rand());
    $boundary_alt = "-----=".md5(rand());
    //==========
     
    //=====Définition du sujet.
    $sujet = "Hey mon ami !";
    //=========
     
    //=====Création du header de l'e-mail.
    $header = "From: \"WeaponsB\"<weaponsb@mail.fr>".$passage_ligne;
    $header.= "Reply-to: \"WeaponsB\" <weaponsb@mail.fr>".$passage_ligne;
    $header.= "MIME-Version: 1.0".$passage_ligne;
    $header.= "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;
    $message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
    //=====Ajout du message au format texte.
    $message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
    $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    $message.= $passage_ligne.$message_txt.$passage_ligne;
    //==========
     
    $message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
     
    //=====Ajout du message au format HTML.
    $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;
    //==========
     
    //=====On ferme la boundary alternative.
    $message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
    //==========
     
     
     
    $message.= $passage_ligne."--".$boundary.$passage_ligne;
     
    //=====Ajout de la pièce jointe.
    $message.= "Content-Type: image/jpeg; name=\"image.jpg\"".$passage_ligne;
    $message.= "Content-Transfer-Encoding: base64".$passage_ligne;
    $message.= "Content-Disposition: attachment; filename=\"image.jpg\"".$passage_ligne;
    $message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
    $message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
    //========== 
    //=====Envoi de l'e-mail.
    mail($mail,$sujet,$message,$header);
     
    //==========
    ?>
    lorsque je vais sur Php.net par exemple je vois pas mal de choses sur le sujet du type :
    The example indicates \r\n at the end of each line in the headers but this was causing me problems as emails showed some of the headers as part of the body. I simply used only \n as in some of the other examples and the problem went away.
    If you use the constant PHP_EOL instead of own character sequences, the php installation will take care for the required line ending as well on Linux as on Windows installations.
    his is my solution of problems with Windows Mail on Vista. I got some of the headers in the mail body as plain text. When I removed '\r' and left just '\n' at the end of the two last lines of header it worked. This error didn't show up in my yahoo mail.
    ....
    en fait je ne sais pas trop quoi faire et pourquoi :
    si mail() s'appuit sur sendmail faut-il mettre /n le "problème des serveurs qui boguent" reste t-il avec /n dans le header?...
    Merci de votre retour d'expérience bien sûr je peux tester tous cela mais l'approche me parait peux "scientifique" je pense que les dévelloppeurs de clients Mail ont résolus cela depuis longtemps.
    Merci de vos conseils et explications.

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    pour envoyer des e-mails complexes, le plus simple est d'utiliser une librairie qui fait déjà tout comme PHPMailer par exemple :
    http://jcrozier.developpez.com/tutor...eloppeurs/#LIV

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 24
    Par défaut
    Citation Envoyé par nosferapti Voir le message
    pour envoyer des e-mails complexes, le plus simple est d'utiliser une librairie qui fait déjà tout comme PHPMailer par exemple :
    http://jcrozier.developpez.com/tutor...eloppeurs/#LIV
    Oui bien sûr, mais je voulais comprendre un peu plus à fond le sujet. Sans doute que la plupart des développeurs vont à l'essentiel qui marche.

Discussions similaires

  1. [AC-2013] Inclure les champs d'un état dans le corps d'un e-mail
    Par Guillaume-h24 dans le forum VBA Access
    Réponses: 6
    Dernier message: 19/06/2015, 20h01
  2. [HTML] insérer un \n dans le corps d'un mail
    Par lilou77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 20/10/2006, 14h59
  3. Redirection dans le corps d'un mail
    Par Flushovsky dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/10/2006, 09h54
  4. [Mail] mail : headers dans le corps du mail !?
    Par tytom dans le forum Langage
    Réponses: 1
    Dernier message: 24/08/2006, 13h44
  5. [VB6]Chaines en gras dans le corps d'un mail
    Par Safaritn dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 02/02/2006, 14h20

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