Se connecter / S'enregistrer

Résolu Fonction mail(), PHP

Solutions (6)
Tags :
  • Php
  • Smtp
  • Email
  • Programmation
|
Bonjour à tous,

Apres de nombreuses recherches pour résoudre mes erreurs, je m'adresse à vous.

Voila j'ai un court script :

  1. <?php
  2.  
  3. ini_set("SMTP", "smtp.neuf.fr");
  4.  
  5. $mail = htmlspecialchars($_POST['email']);
  6. $sujet = htmlspecialchars($_POST['sujet']);
  7. $content = htmlspecialchars($_POST['corps']);
  8.  
  9. $from = "mycv@online.fr";
  10.  
  11. $headers = "X-Sender: xsender@hotmail.com\n";
  12. $headers .= "From: '".$from."'<mon@domaine.fr>\n";
  13. $headers .= "Reply-To: 'No reply'\n";
  14. $headers .= "Content-Type: text/html; charset=\"iso-8859-1\n";
  15.  
  16. if(mail("gillian.petit@hotmail.fr", $sujet, $content, $headers)){
  17. echo "Email envoyé avec succès.";
  18. }
  19.  
  20. ?>


... Et j'ai cette erreur lors de l'exécution :

SMTP server response: 501 5.1.7 Bad sender address syntax in ...

Mon PHP.ini :
  1. [mail function]
  2. ; For Win32 only.
  3. ; <a href="http://php.net/smtp" rel="nofollow" target="_blank">http://php.net/smtp</a>
  4. SMTP = localhost
  5. ; <a href="http://php.net/smtp-port" rel="nofollow" target="_blank">http://php.net/smtp-port</a>
  6. smtp_port = 25
  7.  
  8. ; For Win32 only.
  9. ; <a href="http://php.net/sendmail-from" rel="nofollow" target="_blank">http://php.net/sendmail-from</a>
  10. ;sendmail_from =



J'ai vraiment cherché sur Google, mais sans résultat, sinon je ne serais pas ici, donc si quelqu'un peut m'aider, ce serait vraiment sympa, merci d'avance ! :p 
Contenus similaires
Meilleure solution
partage
|
Je vais t'expliquer l'ensemble des paramètres de la fonction mail, ce sera plus intéressant :

Citation :
mail( <adresse_destination>, <Object>, <Message> [, <Header> ]);


  • <adresse_destination> : adresse e-mail du destinataire du mail
  • <Object> : titre du mail
  • <Message> : contenu du mail
  • <Header> : header du mail, c'est à dire toutes les "options" d'envoi du mail

    Le header est une chaîne de caractère contenant de nombreux champs :

  • From : Adresse de l'expéditeur (format : Nom <adresse_mail>)
  • X-Sender : Adresse réelle de l'expéditeur
  • X-Mailer : Logiciel utilisé pour l'envoi des mails
  • X-Priority : Priorité accordée au mail (valeur allant de 1 pour Urgent à 3 pour normal)
  • Return-Path : Adresse utilisée pour la réponse au mail
  • Content-Type : Contenu du mail (texte, html...)
  • cc : Carbon Copy, c'est à dire adresse en copie du mail, visible par tout le monde
  • bcc : Blind Carbon Copy, idem que "cc", mais invisible !


    Il est possible d'ajouter encore des champs dans le header, je n'ai pas tout listé. Par exemple pour mettre une pièce jointe il ne faut pas oublier :

  • MIME-Version : la version de MIME du message (MIME = Multipurpose Internet Mail Extensions)
  • boundary : le délimiteur permettant de séparer pièces jointes et corps de messages (ou autres)

    Etc... il y a beaucoup d'option.


    Passons à la configuration de 'PHP.ini' avec 'SendMail'. C'est principalement dans un environnement Unix que cette partie est la plus intéressante (bien qu'il soit possible d'installer SendMail sur Windows).

    Warning : La configuration qui va suivre ne te sera utile que dans le cas où tu possèdes la machine qui héberge ton site, la plus part des hébergeurs actuel on déjà une configuration pleinement fonctionnel !

    Dans le fichier 'PHP.ini' tu devrais trouver ça :
    Citation :
    [mail function]
    ; For Win32 only.
    ;SMTP =

    ; For Win32 only.
    ;sendmail_from =

    ; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
    ;sendmail_path =



    Explications :
  • SMTP = string : Sous Windows seulement : nom de l'hôte ou adresse IP du SMTP que PHP doit utiliser pour envoyer un mail avec la fonction mail().
  • sendmail_from = string : Sous Windows seulement : valeur du champ "From:" qui doit être utilisée lors de l'envoi de mail. Cette directive définira également l'en-tête "Return-Path:".
  • sendmail_path = string : Localisation du programme sendmail : habituellement /usr/sbin/sendmail ou /usr/lib/sendmail.

    Donc, pour configurer 'SendMail' il faut préciser le chemin de l'application dans 'sendmail_path' et ne pas oublier d'enlever le ';'.


    Ensuite, il faut s'intéresser au fichier 'SendMail.ini' pour plus d'options :
    Citation :
    [sendmail]

    ; you must change mail.mydomain.com to your smtp server
    smtp_server=mail.mydomain.com

    ; the default domain for this server will be read from the registry
    ; this will be appended to email addresses when one isn't provided
    ; if you want to override the value in the registry, uncomment and modify
    ;default_domain=mydomain.com

    ; log smtp errors to error.log (defaults to same directory as sendmail.exe)
    ; uncomment to enable logging
    ;error_logfile=error.log

    ; create debug log as debug.log (defaults to same directory as sendmail.exe)
    ; uncomment to enable debugging
    ;debug_logfile=debug.log

    ; if your smtp server requires authentication, modify the following two lines
    ;auth_username=
    ;auth_password=

    ; if your smtp server uses pop3 before smtp authentication, modify the
    ; following three lines
    ;pop3_server=
    ;pop3_username=
    ;pop3_password=

    ; to force the sender to always be the following email address, uncomment and
    ; populate with a valid email address. this will only affect the "MAIL FROM"
    ; command, it won't modify the "From: " header of the message content
    ;force_sender=

    ; sendmail will use your hostname and your default_domain in the ehlo/helo
    ; smtp greeting. you can manually set the ehlo/helo name if required
    ;hostname=


    Avec un peu d'anglais, c'est facilement compréhensible.


    J'espère t'avoir éclairé, bonne continuation.
    • Commenter cette solution |
    Score
    1
    òh
    òi
    |
    Merci pour cette réponse complète, elle m'a été très utile.

    Dernière chose, lors du test je remarque que l'email reçu laisse apparaitre les balises XHTML .. Est - ce que tu sais pourquoi ?

    Merci d'avance ;) 
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Animateur |
    Meilleure réponse sélectionnée par dandibot.
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    Ceci dépend du lecteur utilisé. Le Content-Type étant défini sur text/html, cela permet d'informer les logiciels qu'il peut être nécessaire de 'parser' le message par un système HTML. Suivant le logiciel utilisé, il se peut qu'il n'arrive pas à le faire et/ou que les balises ne soient pas vraiment en HTML mais en caractères spéciaux ce qui n'est pas interprété...

    Tout dépend de comment le message est enregistré et lues.
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    Désolé du délai de réponse, je n'ai plus eu accès à mon PC quelques jours ...

    Merci beaucoup de ta réponse en tout cas.

    Derniere chose, peux tu m'expliquer à quoi correspond le " X-Sender" ? C'est le mail de l'envoyeur ?

    De même, comment paramètres tu le "SendMail" ?
    Merci d'avance de tes réponses ;) 
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    Tiens, un bout de code que j'utilise et qui marche très bien :
    1. $email = 'toto@tata.net';
    2.  
    3. $mailadd = 'foo@bar.net';
    4.  
    5. $headers = "From: <" . $mailadd . ">\n";
    6. $headers .= "X-Sender: <" . $mailadd . ">\n";
    7. $headers .= "X-Mailer: PHP\n"; // mailer
    8. $headers .= "Return-Path: <" . $mailadd . ">\n"; // Return path for errors
    9. $headers .= "Reply-To: 'No reply'\n";
    10. $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
    11.  
    12. $subject = "Test of PHP Mail sending";
    13. $mesage = "This is a simple PHP Mail Sending Test ...<br />Please, don't reply !";
    14.  
    15. mail($email, $subject, $mesage, $headers);


    Ensuite, important à savoir c'est que ton initialisation de 'SMTP' n'est utile que si t'es dans un environnement Windows, sur les linux (la plus part des serveurs web) il te faut configurer 'SendMail'.



    • Commenter cette réponse |

    Ce n'est pas ce que vous cherchiez ?

    Tom's guide dans le monde
    • Allemagne
    • Italie
    • Irlande
    • Royaume Uni
    • Etats Unis
    Suivre Tom's Guide
    Inscrivez-vous à la Newsletter
    • ajouter à twitter
    • ajouter à facebook
    • ajouter un flux RSS