Problème avec fonction mail ()

zatox Messages postés 640 Date d'inscription   Statut Membre Dernière intervention   -  
avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, je n'arrive plus à faire marcher la fonction mail (). Depuis les sites que j'ai créé, on a la possibilité d'envoyer un mail par un formulaire. Voici mon code:

if(@mail($to, $objet, $texte, $mailheaders)==false)
{
echo "Problème envoi mail: veuillez réessayer plus tard";
}
else
{
echo "Mail envoyé avec succès à " . $to;
}

Chaque fois que j'envoie un formulaire, j'ai bien le message Mail envoyé avec succès à " . ici l'adresse du sestinataire est bonne mais le destinataire (en l'occurence c'est moi) n'a jamais de message. Pourtant cette fonction a marché telle qu'elle est écrite et maintenant elle ne marche plus ni en test sur mon disque ni chez mon hébergeur ovh.
Est-ce que quelqu'un aurait une idée ? merci pour vos réponses.
A voir également:

17 réponses

bqst Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   24
 
Bonsoir,
j'ai eu le même soucis sur ovh

ton header doit ressembler à ça :
$headers = "MIME-Version: 1.0\n"; 
$headers .= "Content-type: text/plain; charset=iso-8859-1\n";
$headers .= "From: $votremail\nReply-to : $votremail\nX-Mailer:PHP"; 

Ensuite tu fais :
  if(mail($destinataire,$objet,$message,$headers)){
echo "ok";
}else{
echo "pb";

cordialement
0
zatox Messages postés 640 Date d'inscription   Statut Membre Dernière intervention   66
 
OK, merci pour ta réponse, j'ai fais ce que tu m'as dit, je l'ai testé pour le moment sur mon disque, ça marche, donc c'est déjà un pas important ensuite j'ai 2 problèmes:

1) Pas très important il me mets le message dans le dossier spam, ça, à la rigueur je m'en fout un peu vu qu'avant de jeter mes spams je regarde d'où ça vient.

2) Le deuxième problème est plus embêtant car dans mon formulaire je fais saisir l'adresse mail de la personne qui va envoyer le message afin de pouvoir lui répondre. Je récupère bien cette zone mais je ne sais pas où la mettre afin que lorsque je fais répondre j'ai bien dans le destinataire l'adresse mail de la personne. Actuellement si je fais répondre comme destinataire j'ai: "system user for php <apache@localhost>"

J'ai essayé de mettre dans le troisième headers from: $votremail dans $votremail l'adresse mail que je récupère mais ça ne marche pas. Est-ce que tu sais à quel endroit je dois charger cette zone ?
merci pour les réponses








je récupère dans mon script l'adresse mail de la personne, et j'aimerai bien que quand je fais répondre
0
zatox Messages postés 640 Date d'inscription   Statut Membre Dernière intervention   66
 
Bonjour, euh je rectifie un peu ce que j'ai dis dans mon précédent message, à savoir que chez mon hébergeur, maintenant la fonction mail marche, et je reçois les messages dans ma boîte non pas dans les spams mais bien dans mon courrier. Par contre l'expéditeur du message est: monsite@start.ovh.net

Ce qui fait que si je fais répondre dans le but de répondre et d'établir un dialogue avec la personne qui m'a écri, je vais répondre à monsite@start.ovh.net qui n'est autre qu'une boîte aux lettres qui m'appartient chez mon hébergeur OVH. Je voudrais donc savoir s'il est possible au niveau des headers de dire que l'expéditeur du message c'est par exemple alex.dupont@laposte.net de telle sorte que quand je fais répondre, je vais répondre à alex.dupont@laposte.net qui est la personne qui a envoyé le message via mon formulaire ?
merci pour vos réponses.
0
avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Tu dois utiliser les entêtes si tu veux préciser le "From" et le "Reply-To".
https://www.php.net/manual/fr/function.mail.php : le deuxième exemple fonctionne très bien.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zatox Messages postés 640 Date d'inscription   Statut Membre Dernière intervention   66
 
Bonsoir, je me suis peut-être mal exprimé, oui j'utilise bien les entêtes comme indiqué mais dans le message que je reçois dans ma boîte aux lettres (c'est moi qui reçois vu que dans $to j'ai mis mon e-mail) j'ai toujours dans l'expéditeur: <apache@localhost> en test sur mon disque ou monsite@start.ovh.net sur mon hébergeur.
Or dans from j'ai bien mis la variable que j'ai récupérée et qui contient l'adresse mail de la personne qui rempli le formulaire par exemple supposons que la personne qui rempli le formulaire mets dans l'adresse mail qu'il saisi : alex.dupont@laposte.net ce que je voudrais c'est que dans le message que je reçois avoir comme expéditeur alex.dupont@laposte.net de façon à ce que lorsque je fais répondre au message que j'ai reçu dans ma boîte je réponde bien à alex.dupont@laposte.net et non pas à <apache@localhost> ou monsite@start.ovh.net

voici ce que j'ai codé dans le headers

$headers = 'From: $from' . "\r\n" .
//'Reply-To: $from' . "\r\n" .
//'X-Mailer: PHP/' . phpversion();

dans la variable $from j'ai bien l'adresse de la personne c'est à dire dans mon example alex.dupont@laposte.net
mais dans ma boîte non j'ai comme expéditeur soit <apache@localhost> soit monsite@start.ovh.net selon que je suis en test ou sur mon site.
Comme je veux une variable dans le headers ($from) peut-être que c'est mal codé ? je ne sais pas si quelqu'un a une idée merci pour votre aide.
0
avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Tes lignes sont en commentaires ...
Sinon je suis aussi sur l'offre Start d'OVH et aucun soucis.
0
zatox Messages postés 640 Date d'inscription   Statut Membre Dernière intervention   66
 
Bonsoir, euh excuses les lignes de codes que j'ai indiquée c'est une ancienne version, j'ai bien mis ceci:
$headers = 'From: $from' . "\r\n" .
'Reply-To: $from' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

et dans mon message l'expéditeur c'est <apache@localhost>
d'ailleurs j'ai fais plusieurs tests, je peux mettre n'importe quoi dans from: et Reply to: ici je mets des variables mais si j'écris

$headers = 'From: alex.dupont@laposte.net' . "\r\n" .
'Reply-To: alex.dupont@laposte.net' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

et bien dans l'expéditeur j'ai toujours <apache@localhost>

?!!!!!!!!!! mystère je dois surement avoir une erreur de syntaxe mais je ne sais pas où.
0
zatox Messages postés 640 Date d'inscription   Statut Membre Dernière intervention   66
 
Oups mille excuses je n'utilisais pas la bonne variable dans headers dans la fonction mail bon voici le code complet:

$headers = 'From: $from' . "\r\n" .
'Reply-To: $from' . "\r\n" .
'X-Mailer: PHP/' . phpversion();



if(mail($to, $objet, $texte, $headers))

{

echo "Mail envoyé avec succès à " . $to;

}

else

{

echo "Problème envoi mail: veuillez réessayer plus tard";

}


là dans l'expéditeur j'ai: $from@start.ovh.net alors que je voudrais avoir ce qu'il y a dans la variable $from
0
avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Entre apostrophes, les variables ne sont pas remplacées par leur valeur.
0
zatox Messages postés 640 Date d'inscription   Statut Membre Dernière intervention   66
 
oui je suis d'accord avec toi, j'ai essayé plusieurs trucs mais ça ne marche pas est-ce que toi tu as une variable dans from ou bien est-ce que c'est une constante ? si c'est une variable je veux bien profiter de la syntaxe, ou alors ça veux dire que ce n'est pas possible de positionner une variable au niveau des headers ? ça m'étonne un peu mais bon, dans ce cas je n'ai pas de soluce.
0
avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
$headers = 'From: '.$from . "\r\n" .
'Reply-To: '.$from . "\r\n" .
'X-Mailer: PHP/' . phpversion();

if(mail($to, $objet, $texte, $headers)) {
    echo "Mail envoyé avec succès à " . $to;
} else {
    echo "Problème envoi mail: veuillez réessayer plus tard";
}
0
zatox Messages postés 640 Date d'inscription   Statut Membre Dernière intervention   66
 
Bonjour, non, désolé ça ne marche pas, si ça marche chez toi (sur OVH) peut-être qu'il y a une variable à positionner dans le php.ini mais là je ne sais pas laquelle si tu as une idée ?!!! merci pour ton aide.
0
avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Il n'y a rien à faire, la configuration par défaut sur OVH permet de le faire.
Es-tu sûr que $from est définie ?
0
zatox Messages postés 640 Date d'inscription   Statut Membre Dernière intervention   66
 
Bonsoir, ben oui, voici le bout de code concerné:

echo "Voici le $ from en question = " . $from;
$headers = 'From: $from' . "\r\n" .
'Reply-To: $from' . "\r\n" .
'X-Mailer: PHP/' . phpversion();



if(mail($to, $objet, $texte, $headers))

{

echo "Mail envoyé avec succès à " . $to;

}

else

{

echo "Problème envoi mail: veuillez réessayer plus tard";

}


Ce que m'affiche le echo :

Voici le $ from en question = alex.dupont@laposte.net

Ce que j'ai dans ma boîte aux lettres:

de $from@localhost
répondre à $from@localhost
date 17 janvier 2010 01:48
objet Test

masquer les détails 01:48 (Il y a 3 minutes)

- Masquer le texte des messages précédents -
Nom: DUPONT
Prénom: Alexandre
Adresse mail: alex.dupont@laposte.net
Téléphone: 05.55.52.50.02
Message: C'est un test

Tu vois que si je fais répondre, je vais répondre à $from@localhost au lieu de répondre à alex.dupont@laposte.net (bon là je suis sur mon disque ok )

Voilà, il y a peut-être un truc gros comme une barraque mais je vois pas quoi.
Bonne nuit et merci.
0
zatox Messages postés 640 Date d'inscription   Statut Membre Dernière intervention   66
 
Euh même si je fais ça
$headers = 'From: '.$from . "\r\n" .
'Reply-To: '.$from . "\r\n" .
'X-Mailer: PHP/' . phpversion();

ça marche pas non plus bon je refais mes tests demain ou lundi parceque là je vois plus très clair.
0
zatox Messages postés 640 Date d'inscription   Statut Membre Dernière intervention   66
 
Bonjour, tu ne tiens pas compte de mes 2 derniers messages, hier soir il était tard et je n'avais pas les yeux en face des trous, donc voici le code, c'est celui que tu m'avais donné et ça marche:

$headers = 'From: '.$from . "\r\n" .
'Reply-To: '.$from . "\r\n" .
'X-Mailer: PHP/' . phpversion();

if(mail($to, $objet, $texte, $headers))
{
echo "Mail envoyé avec succès à " . $to;
}
else
{
echo "Problème envoi mail: veuillez réessayer plus tard";
}

Et merci encore.
0
avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
"est-ce que toi tu as une variable dans from ou bien est-ce que c'est une constante ?"
Ça ne change rien.
Si toi tu utilises une constante, alors ne mets pas le "$" devant le nom de ta constante.

Tu n'as toujours pas corrigé le code par ce que je t'avais donné à la réponse #11. Les variables entre apostrophes ne sont pas remplacées par leur valeur ! Donc soit tu mets des guillemets soit tu fais la concaténation :
$headers = 'From: ' . $from . "\r\n" .
'Reply-To: ' . $from . "\r\n" .
'X-Mailer: PHP/' . phpversion();
0