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 :

Fonction mail : probleme insoluble. Encodage fichier ?


Sujet :

Langage PHP

  1. #1
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut Fonction mail : probleme insoluble. Encodage fichier ?
    Bonjour,

    depuis quelque heures, je ronge mon frein sur un problème assez bizarre. Voici mon code (un peu épuré) :

    Code php : 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
     
     function envoi_mail_activation() {
     
            // --- passage à la ligne des headers
            if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $this->_email))
                $passage_ligne = "\r\n";
            else
                $passage_ligne = "\n";
     
            $headers = 'From: "Admin Space Conqueror" <no-reply@spaceconqueror.com>'.$passage_ligne;
            $headers .= 'Reply-to: "Admin Space Conqueror" <no-reply@spaceconqueror.com>'.$passage_ligne;
            $headers .= 'MIME-Version: 1.0'.$passage_ligne;
            $headers .= "Content-Type: text/html; charset=\"utf-8\"".$passage_ligne;
            $headers .= "Content-Transfer-Encoding: 8bit".$passage_ligne;
     
            $message = '...';
            $message .= '<a href="'.URL.'lib/controler.php?activation='.$this->_univers.'-'.sha1($this->_pseudo.$this->_mdp).'">'.URL.'lib/controler.php?activation&'.$this->_univers.'-'.sha1($this->_pseudo.$this->_mdp).'</a><br /><br />';
            $message = '...';
     
            // --- si le mail n'est pas envoyé, on supprime tout
            if(mail($this->_email, 'Confirmation d\'inscription sur l\'univers '.ucfirst($this->_univers), $message, $headers) === true) {
                mail(EMAIL_ADMIN, 'Inscription de '.ucfirst(strtolower($this->_pseudo)).' sur l\'univers '.ucfirst($this->_univers), 'Inscription de '.ucfirst(strtolower($this->_pseudo)).' sur l\'univers '.ucfirst($this->_univers), $headers);
                $this->msg(COMPTE_CREE);
            }else {
                Application::addRequete('DELETE FROM joueurs WHERE joueur_id=? LIMIT 1', array($this->_joueur_id));
                Application::doRequetes();
                $this->msg(ERREUR_CREATION_COMPTE);
            }
        }

    Ma ligne posant problème est identifiée et est la suivante :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $message .= '<a href="'.URL.'lib/controler.php?activation='.$this->_univers.'-'.sha1($this->_pseudo.$this->_mdp).'">'.URL.'lib/controler.php?activation='.$this->_univers.'-'.sha1($this->_pseudo.$this->_mdp).'</a><br /><br />';

    Mon problème : il suffit que je mette un "=" ou "&" ou "&amp;" par exemple pour que l'utilisateur ne recoive pas son mail d'activation

    Au début je codais (un peu à l'arrache je l'avoue sur notepad++) et je pensais que peut etre vu que la gestion de l'encodage laisse à désirer sur notepad++ je trouve, qu'il pouvait s'agir d'un problème de (méta)caractère ou autre dans mon fichier (je précise que j'ai déjà réussi à envoyer des mails d'activatino sur d'autres projet hein). Du coup je suis passé sur netbeans mais idem, dès que je mets un & ou = je ne recois pas mon mail mais la fonction mail() retourne true...

    Quelqu'un a une idée ?

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Pouah, je comprends plus rien

    Dès que je mets un = ou & ou www je ne recois pas mon mail mais j'ai pas d'erreurs

    Quelqu'un aurait il une idée ?

    Je remets mes entetes :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $headers = 'From: "Admin Space Conqueror" <no-reply@spaceconqueror.com>'.$passage_ligne;
    $headers .= 'Reply-to: "Admin Space Conqueror" <no-reply@spaceconqueror.com>'.$passage_ligne;
    $headers .= 'MIME-Version: 1.0'.$passage_ligne;
    $headers .= 'Content-Type: text/html; charset="utf-8"'.$passage_ligne;
    $headers .= 'Content-Transfer-Encoding: 8bit';


  3. #3
    Membre habitué Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Points : 155
    Points
    155
    Par défaut
    tu as essayé avec phpmailer ?

    ça m'a résolu pas mal de problèmes. il y a des soucis pour envoyer des pièces jointe à orange parcontre.

    URL est une constante ?

    sinon fait attention à la longueur des lignes de ton body. il vaut mieux limiter la longueur à 70 caractères. juste pour la compatibilité.
    Le langage de programmation le plus vieux, le plus optimiser et le plus efficace est l'ADN quelqu'un d'extrêmement intelligent l'a obligatoirement inventé.

  4. #4
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour et merci

    pour phpmailer, je suis pas chaud car bon c'est juste pour envoyer un seul mail (très simple) alors mince ca devrait marcher surtout que je l'ai déjà fait à maintes reprises

    exemple complètement absurde résumant bien mon problème :

    Si mon message vaut uniquement $message = "abc" -> mail recu
    Si mon message vaut uniquement $message = "wwwabc" -> mail non recu !!!

    A se fracasser la tete

  5. #5
    Membre régulier Avatar de et.rond.et.rond
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par hiul dragonfel Voir le message
    ça m'a résolu pas mal de problèmes. il y a des soucis pour envoyer des pièces jointe à orange parcontre.
    dans mon ancien boulot on demandait directement aux client de ne pas nous donner une adresse e-mail hotmail ou orange pour que le client soit sur de bien recevoir nos e-mail

    tu essaies d'envoyer l'e-mail à quelle type d'adresse ?
    ... petit patapon

  6. #6
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    gmail ou hotmail mais idem

    PS: j'envoie aucune pieces jointes

  7. #7
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Problème à demi résolu, si j'enleves le

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $headers .= 'Content-Type: text/html; charset=iso-8859-1'.$passage_ligne;

    je peux envoyer des liens

  8. #8
    Membre habitué Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Points : 155
    Points
    155
    Par défaut
    c'est bizard tu nous envois des trucs pas formaté de la même manière.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $headers .= 'Content-Type: text/html; charset=iso-8859-1'.$passage_ligne;
    $headers .= 'Content-Type: text/html; charset="utf-8"'.$passage_ligne;

    il me semble pour que ça fonctionne il faut les guillemets autour de l'encodage et pour que le header fonctionne correctement sa dernière ligne doit avoir 2 EOL.

    dans le message je me suis arrangé pour avoir des lignes de moins de 70 char EOL inclue.
    Le langage de programmation le plus vieux, le plus optimiser et le plus efficace est l'ADN quelqu'un d'extrêmement intelligent l'a obligatoirement inventé.

  9. #9
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Non c'est parce que j'essaie de changer un peu mes entetes au fur et à mesure pour comprendre mon problème. Le fait est que dès que je mets un content-type html, je peux plus envoyer d'HTML (LOL)

  10. #10
    Membre régulier Avatar de et.rond.et.rond
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Points : 119
    Points
    119
    Par défaut
    tu gagneras du temps en réutilisant une bibliothèque déjà toute prête :
    http://stephaneey.developpez.com/tut...php/phpmailer/
    ... petit patapon

  11. #11
    Membre habitué Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Points : 155
    Points
    155
    Par défaut
    je vois que tu a mis "\r\n" comme fin de ligne pour hotmail.

    php mailer ne met que des "\n" pour envoyer des mails.

    au fait tu reçois pas tes mails ou ils ne s'affichent pas (Am I slow ?)
    Le langage de programmation le plus vieux, le plus optimiser et le plus efficace est l'ADN quelqu'un d'extrêmement intelligent l'a obligatoirement inventé.

  12. #12
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Pour mon passage à la ligne, j'ai fais ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $this->_email))
                $passage_ligne = "\r\n";
            else
                $passage_ligne = "\n";

    Non je ne reçois pas mes mails enfin, 1 sur 2:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(mail($this->_email, 'Confirmation d\'inscription sur l\'univers '.ucfirst($this->_univers), $message, $headers) === true) {
                mail(EMAIL_ADMIN, 'Inscription de '.ucfirst(strtolower($this->_pseudo)).' sur l\'univers '.ucfirst($this->_univers), 'Inscription de '.ucfirst(strtolower($this->_pseudo)).' sur l\'univers '.ucfirst($this->_univers), $headers);
                $this->msg(COMPTE_CREE);
            }else {
                Application::addRequete('DELETE FROM joueurs WHERE joueur_id=? LIMIT 1', array($this->_joueur_id));
                Application::doRequetes();
                $this->msg(ERREUR_CREATION_COMPTE);
            }

    Je recois mon mail à EMAIL_ADMIN (le meme pour mon test)

  13. #13
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Dans mon mail (partie message) j'ai ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <p><a href="'.URL.'lib/controler.php?univers='.$this->_univers.'&sha='.sha1($this->_pseudo.$this->_mdp).'">'.URL.'lib/controler.php?univers='.$this->_univers.'&sha='.sha1($this->_pseudo.$this->_mdp).'</a></p>
    -> ca marche

    Par contre ceci (remplacement de la variable sha par activation) :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <p><a href="'.URL.'lib/controler.php?univers='.$this->_univers.'&activation='.sha1($this->_pseudo.$this->_mdp).'">'.URL.'lib/controler.php?univers='.$this->_univers.'&activation='.sha1($this->_pseudo.$this->_mdp).'</a></p>
    -> ne marche pas

    J'en ai déduis que peut etre suis je a la limite des 70 caractères évoqués dans la doc officielle :

    Message à envoyer.

    Chaque ligne doit être séparée par un caractère LF (\n). Les lignes ne doivent pas comporter plus de 70 caractères.
    Mais les 70 caractères correspondent ils aux caractères de la chaine une fois les remplacements des variables par les valeurs littérales faites ou...?

    Autre chose : si je remplaces URL...sha1($this->_pseudo.$this->_mdp) par une variable contenant cette chaine, ca fonctionne pas

    Des idées ou propositions là dessus ?

    Merci

Discussions similaires

  1. J2EE envoie de mail problem sur les fichiers joints
    Par cesear89 dans le forum NetBeans
    Réponses: 1
    Dernier message: 26/03/2011, 14h30
  2. Mail | probleme d'encodage des caractères
    Par kippix dans le forum Debian
    Réponses: 1
    Dernier message: 19/05/2007, 22h36
  3. Réponses: 7
    Dernier message: 10/06/2006, 14h31
  4. [Mail] Probleme fonction mail()
    Par moulefrite dans le forum Langage
    Réponses: 18
    Dernier message: 23/05/2006, 08h21
  5. [Mail] Probleme fonction mail()
    Par tissot dans le forum Langage
    Réponses: 1
    Dernier message: 14/11/2005, 12h55

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