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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Problème avec la fonction mail()


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 99
    Points : 55
    Points
    55
    Par défaut Problème avec la fonction mail()
    Bonjour,

    Voila j'ai un petit soucis en ce moment, j'aimerais faire une page de contacte sur mon site. J'ai donc vu dans le manuel qu'il existait une fonction mail.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mail($to, $title, $message);
    Je me suis donc lance dans la création de ma page de contacte mais je n'arrive pas a envoyer de mail et je ne sais pas trop pourquoi... je vous envoie le morceau de code.

    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
     
    <?
    $expnom=$_POST['expnom'];
    $expprenom=$_POST['expprenom'];
    $expemail=$_POST['expemail'];
    $destinataire=$_POST['destinataire'];
    $lettre=$_POST["lettre"];
    $objet=$_POST["objet"];
     
    $nom_rapport = false;
    $prenom_rapport = false;
    $email_rapport = false;
    $destinataire_rapport = false;
    $lettre_rapport = false;
    $sendmessage = false;
    $objet_rapport = false;
     
    if($expnom!="") { $nom_rapport = true;}
    if($expprenom!="") { $prenom_rapport = true;}
    if($expemail!="") { $email_rapport = true;}
    if($destinataire!="") { $destinataire_rapport = true;}
    if($lettre!="") { $lettre_rapport = true;}
    if($objet!="") { $objet_rapport = true;}
    if($lettre_rapport && $nom_rapport && $prenom_rapport && $email_rapport && $destinataire_rapport && $objet_rapport) { $sendmessage = true; }
    if($sendmessage){
     
    if (mail($destinataire, $objet, $lettre,)) // Envoi du message
    {
        echo 'Votre message a bien été envoyé ';
    }else{ // Non envoyé{
    echo "Votre message n'a pas pu être envoyé";}
    }?>
    Sachant que j'ai vérifier avec des echo, $destinataire c'est bien mon adresse mail, $objet est bien le titre du message et $lettre correspond bien a mon message. Alors je ne vois pas trop pourquoi je ne puis envoyer de message. Si quelqu'un pouvait m'éclairer s'il vous plait...

  2. #2
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Salut,

    Essaye en enlevant la virgule après $lettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (mail($destinataire, $objet, $lettre,))


    Les boutons et existent, servez-vous en

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 99
    Points : 55
    Points
    55
    Par défaut Re
    Donc je viens d'enlever la virgule et j’obtiens toujours, "le message n'a pas été envoyé".

  4. #4
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    C'est en local ou sur un hébérgeur ?
    Le serveur smtp est bien configuré ?


    Les boutons et existent, servez-vous en

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 99
    Points : 55
    Points
    55
    Par défaut Re
    Re, alors euh la machine, c'est une machine dedibox. Et donc je voudrais envoyer un mail sur une adresse hotmail, gmail ou autre. Si je me trompe pas le serveur smtp se configure dans le php.ini? Et donc je suis sur le port 25, en localhost.


    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
     
    [mail function]
    ; For Win32 only.
    ; http://php.net/smtp
    SMTP = localhost
    ; http://php.net/smtp-port
    smtp_port = 25
     
    ; For Win32 only.
    ; http://php.net/sendmail-from
    ;sendmail_from = me@example.com
     
    ; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
    ; http://php.net/sendmail-path
    ;sendmail_path =
     
    ; Force the addition of the specified parameters to be passed as extra parameters
    ; to the sendmail binary. These parameters will always replace the value of
    ; the 5th parameter to mail(), even in safe mode.
    ;mail.force_extra_parameters =
     
    ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
    mail.add_x_header = On
     
    ; The path to a log file that will log all mail() calls. Log entries include
    ; the full path of the script, line number, To address and headers.
    ;mail.log =

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 99
    Points : 55
    Points
    55
    Par défaut Re
    Ok, après lu ma grosse connerie de confondre la ligne correspondant a win32, j'ai donc fais quelques recherche sur le serveur smtp (sous ubuntu). Et j'ai vu que le paquet utilisé était exim4. Je l'ai donc installé, et sa marche beaucoup mieux. Maintenant me reste la configuration du serveur smtp :p

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 99
    Points : 55
    Points
    55
    Par défaut Re
    Donc après avoir lu quelques pages sur Exim, j'arrive a envoyer des e-mail avec comme expéditeur www-data@monsite.fr.

    D'après ce que j'ai compris le www-data est en faite l'utilisateur apache si je dis pas de bêtise.
    Comment faire alors pour que ce ne soit plus www-data qui envoie les messages?
    Hum par exemple, je voudrais que par le site, l'administrateur envoie des mails par le site avec administrateur@monsite.fr, le support technique lui sa serait technique@monsite.fr etc...

  8. #8
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Citation Envoyé par minipopov Voir le message
    Donc après avoir lu quelques pages sur Exim, j'arrive a envoyer des e-mail avec comme expéditeur www-data@monsite.fr.

    D'après ce que j'ai compris le www-data est en faite l'utilisateur apache si je dis pas de bêtise.
    Comment faire alors pour que ce ne soit plus www-data qui envoie les messages?
    Hum par exemple, je voudrais que par le site, l'administrateur envoie des mails par le site avec administrateur@monsite.fr, le support technique lui sa serait technique@monsite.fr etc...
    Pour ca tu doit ajouter un 4eme paramètre headers a ta fonction mail, c'est expliqué dans la doc :
    http://php.net/manual/fr/function.mail.php


    Les boutons et existent, servez-vous en

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 99
    Points : 55
    Points
    55
    Par défaut Re
    Voila c'est bon tout marche comme je le souhaite, j'envoie le code au cas ou sa pourrait aider certains. Et je vous remercie tous!! merci :p

    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
     
    <?
     
    $expnom=$_POST['expnom'];
    $expprenom=$_POST['expprenom'];
    $expemail=$_POST['expemail'];
    $destinataire=$_POST['destinataire'];
    $lettre=$_POST["lettre"];
    $objet=$_POST["objet"];
     
    $nom_rapport = false;
    $prenom_rapport = false;
    $email_rapport = false;
    $destinataire_rapport = false;
    $lettre_rapport = false;
    $sendmessage = false;
    $objet_rapport = false;
     
    if($expnom!="") { $nom_rapport = true;}
    if($expprenom!="") { $prenom_rapport = true;}
    if($expemail!="") { $email_rapport = true;}
    if($destinataire!="") { $destinataire_rapport = true;}
    if($lettre!="") { $lettre_rapport = true;}
    if($objet!="") { $objet_rapport = true;}
    if($lettre_rapport && $nom_rapport && $prenom_rapport && $email_rapport && $destinataire_rapport && $objet_rapport) { $sendmessage = true; }
     
    if($sendmessage){
     
    $mail =$destinataire; 
    if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui rencontrent des bogues.
    {
    	$passage_ligne = "\r\n";
    }
    else
    {
    	$passage_ligne = "\n";
    }
     
    $lettre=nl2br($lettre); //on inclue des <br /> apres chaque retour a la ligne
    $message_html = "$lettre"; // 
    $boundary = "-----=".md5(rand());
     
    //Header
    $header = "From: \"$expnom $expprenom\"<$expemail>".$passage_ligne;
    $header.= "Reply-to: \"$expnom $expprenom\" <$expemail>".$passage_ligne;
    $header.= "MIME-Version: 1.0".$passage_ligne;
    $header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
     
    //Debut message
    $lettre = $passage_ligne."--".$boundary.$passage_ligne;
    $lettre.= $passage_ligne."--".$boundary.$passage_ligne;
    //=====Message
    $lettre.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
    $lettre.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    $lettre.= $passage_ligne.$message_html.$passage_ligne;
    //fin message
    $lettre.= $passage_ligne."--".$boundary."--".$passage_ligne;
    $lettre.= $passage_ligne."--".$boundary."--".$passage_ligne;
    //envoie
    mail($mail,$objet,$lettre,$header);
     
    echo "
    <div style='margin:auto; width:630px;'>Nous avons bien envoy&eacute; le mail au service demand&eacute;, nous essayerons de vous r&eacute;pondre dans les plus bref delait.</div>";
     
    }
    ?>

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

Discussions similaires

  1. [Mail] problème avec la fonction mail()
    Par leclone dans le forum Langage
    Réponses: 3
    Dernier message: 19/02/2007, 12h54
  2. [Mail] problème avec la fonction mail()
    Par chorokari dans le forum Langage
    Réponses: 7
    Dernier message: 03/11/2006, 19h20
  3. [Mail] Problème avec la fonction mail
    Par acieroid dans le forum Langage
    Réponses: 3
    Dernier message: 10/07/2006, 20h07
  4. Réponses: 7
    Dernier message: 10/06/2006, 14h31
  5. [Mail] problème avec la fonction mail()
    Par artotal dans le forum Langage
    Réponses: 2
    Dernier message: 13/11/2005, 03h14

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