Voir la version complète : Fonction mail() ne marche pas ?
Bonjour tout le monde,
Je suis un total débutant en php. Et ca fait qq temps maintenant que je lutte sur un pb.
J'ai créé le script suivant qui est le plus simple possible.
message_test.php
<?php
$TO = "toto@mondomaine.fr";
$h = "From: " . $TO;
$message = "message test";
mail($TO, $subject, $message, $h);
?>
(avec toto... mon adresse mail bien sur)
Ce script hébergé chez FREE fonctionne parfaitement.
Chez OVH, ca marche pas. J'ai souscrit à l'offre 90plan qui permet le PHP pourtant.
Mais d'ailleurs, quand on fait ca, sur quel SMTP s'appuie la fonction mail() ?
Même une page avec du code tout simple ne marche pas. S'agit-il d'une mauvaise implémentation de ma part, ou faut-il que je me renseigne auprès d'OVH ?
Merci pour votre aide
J'ai exactement le meme problème.
Aucun message d'erreur ne s'affiche mais les mails ne partent pas.
Quelqu'un a une idée ?
On peut envoyer un message à celui qui est l'envoyeur ? Normalement oui je pense.
Le $subject n'est pas initialisé, ce n'est pas le problème ? Il faut peut-être mettre au moins "".
Sinon le reste me paraît parfaitement correct, ce n'est pas le PHP qui est en cause.
Idem ! Même problème !
Je me demande si la fonction mail() ne serait pas désactivée ?
InK0
Les serveur ont un peu de mal en ce moment (enfin un peu ... tout est en rade).
Raison invoquée : augmentation du spam (en gros doublement des mails depuis un mois), seule solution : attendre ou changer d'hébergeur.
Réponse de la hotline :
Bonjour,
cette fonction est désactivée sur les demo1g, afin d'éviter les abus. Elle est disponible sur tous nos autres hébergements, autre que 20gp (qui ne supporte pas php).
Merci pour la réponse ... au moins, on est fixé ! :)
InK0
Je viens de faire un test depuis un de mes hébergements (un 90Plan) et ca fonctionne.
Bon le mail à mis 10 minutes alors qu'il devrait mettre 10 secondes mais ca passe.
macrocreation
29/11/2006, 22h19
la fnction marche sur mon 60gp. va sur les liens http://www.macrocreation.com/contactbenin.php et http://www.macrocreation.com/assistant-formulaire1.php. C'est ces scripts que j'ai utilisé sur mon site. Envoi moi ton adresse et je t'envoie le code tout fait et bien commenté.
toujours des soucis avec mail() ?
je suis sur un 300gp.
le mail ne part pas toujours, mais j'ai IE qui mouline jusqu'au time out :(
Pareil pour moi (90Plan) aucun mail n'arrive !
J'ai un 90 Plan...
Pour moi non plus, ça ne marche pas. Je ne reçois rien. Le script a déjà été testé sur un autre hébergement et fonctionnait très bien.
d'ailleurs la fonction mail() renvoie true. mais je ne reçois rien sur aucun de mes comptes emails (de fournisseurs différents).
Y'a pas de message d'erreur. Peut-être qu'il faut attendre plusieurs heures (ou jours?) pour que ça arrive... ça fait déjà plus de 3 heures ...
Il arrive parfois que leur serveur de mail part en sucette, résultat un gfros spool qui peut mettre plusieurs jours à se résorber, et comme en plus on ne reçoit pas les mails retournés en erreur on ne sait pas du tout ce qui se passe.
On peut leurt demander au coup-par-coup la liste des mails reçus en erreur mais bien sur cela n'est pas une solution professionnelle du tout, c'est du bricolage.
Il arrive parfois que leur serveur de mail part en sucette, résultat un gfros spool qui peut mettre plusieurs jours à se résorber, et comme en plus on ne reçoit pas les mails retournés en erreur on ne sait pas du tout ce qui se passe.
Il y a t il une possibilité de contourner ce problème , ce que je veux dire , peut on utiliser autre chose que la fonction mail() ??? où nous aurions plus de garantie que cela marche ??
Il y a t il une possibilité de contourner ce problème , ce que je veux dire , peut on utiliser autre chose que la fonction mail() ??? où nous aurions plus de garantie que cela marche ??
Impossible de contourner, aucune garantie. :(
meme avec les fonction imap ? en passant directement pas le smtp de notre site ?
car mise à part le porb de mail par rapport a un site , je recois et envoie sans prob mes mails avec le client de mail classic ....
En solution extrême je pense qu'il est possible de gérer l'envoi SMTP en ouvrant directement un socket vers le domaine destinataire (sauf si OVH a bloqué cette commande vers un port 25), il faut pour cela récupérer le (les MX), se connecter sur le premier qui répond dans la liste et lui balancer les commandes SMTP qui vont bien . Pour ceux qui n'ont aucune idée de ce que c'est, ça ressemble à ça, bien sur du coup il faut aussi gérer soi-même le code de retour de chaque commande, en particulier les codes 4xx et 5xx qui sont des erreurs :
ehlo xxx
mail from: <monrobot@mondomaine.com>
rcpt to: <ledestinataire@destination.com>
data
...
...
...
Kira Yamato
10/03/2007, 19h19
Pareille, je viens de testé la fonction mail() sur mon 90gp et c'est HS.
Je fais comment pour que mon service compta reçoivent les dons si ils ne reçoivent même pas les emails...?
Inacceptable pour une solution pro !
la réponse d'OVH sera que les hébergements "plan" vu le faible cout pensuel ne sont pas des solution "pro" et que se sont les serveurs dédiés qui le sont.
pour moi la solution est de gérer soi-même les envois à condition que le serveur sur lequel ton plan est hébergé n'empêche pas cela.
Surtout qu'en plus on obtient pas les messages d'erreurs des e-mail qui ont été refusés ou mis en attente pour tentetive ultérieure.
Moi non plus ça ne marche pas sur un media-plan...
c'est vraiement pas pro de la part d'OVH.
loic :mad:
Kira Yamato
12/03/2007, 07h39
la réponse d'OVH sera que les hébergements "plan" vu le faible cout pensuel ne sont pas des solution "pro" et que se sont les serveurs dédiés qui le sont.
pour moi la solution est de gérer soi-même les envois à condition que le serveur sur lequel ton plan est hébergé n'empêche pas cela.
Surtout qu'en plus on obtient pas les messages d'erreurs des e-mail qui ont été refusés ou mis en attente pour tentetive ultérieure.
Sauf que c'est une application php qui reçoit les "dons" et transmet en email les données.
Maintenant j'ai du m'amuser à créée une solution de fortune (implémentation dans une table sql histoire de pas perdre de trace, mais je trouve quand même scandaleux, vu le prix qu'on paye...)
Moi non plus ça ne marche pas sur un media-plan...
c'est vraiement pas pro de la part d'OVH.
loic :mad:
voici un mail du support OVH :
>Bonjour,
>
> un souci interne a été resolu , pouvez vous me confirmer en tentant a nouveau d'envoyer un email svp ?
>
> Cordialement, Gilles
------------------------------------
OVH reconnaisse avoir résolu "un soucis interne".
Pour moi ça fonctionne maintenant, avec un délai de 10 à 15 mn (test vers 06h30 du matin) et peut être plus de délai dans la journée...
En espérant que ce problème soit résolu sur toutes les hébergement mutualisés pro...
Loïc
De mon coté ca ne fonctionne toujours pas correctement. C'est un peu alternatif (ca marche, ca marche pas).
De mon coté ca ne fonctionne toujours pas correctement. C'est un peu alternatif (ca marche, ca marche pas).
sur quel hébergement ?
J'ai investi dans un 90Plan récemment, pensant que je pourrais faire tout ce que je voulais avec. Résultat: heureusement que je dispose d'un serveur à coté sinon mon site web n'aurait pas lieu d'etre. Impossible de faire des daemons, le wget bloqué, l'envoi de mail alternatif.... je suis très décu.
La réponse est donc 90 PLAN (pour résumer).
BertrandB
09/04/2007, 17h02
peut on utiliser autre chose que la fonction mail()
Oui on peut utiliser phpmailer en mode smtp (c'est d'ailleurs la seule solution en Demo1G) et au lieu de s'appuyer sur le serveur de mail d'OVH s'adresser directement au MX du destinataire.
exemple de ce que j'utilse pour un formulaire de réponse.
<?php
require("class.phpmailer.php");
//fonction permettant de trouver les mx déservant l'adresse
function GetMx($email)
{
$mailparts=explode("@",$email);
$hostname = $mailparts[1];
// get mx addresses by getmxrr
$b_mx_avail=getmxrr( $hostname, $mx_records, $mx_weight );
$mxs=array();
if($b_mx_avail){
echo $b_mx_avail;
// copy mx records and weight into array $mxs
for($i=0;$i<count($mx_records);$i++){
$mxs[$mx_weight[$i]]=$mx_records[$i];
}
// sort array mxs to get servers with highest prio
ksort ($mxs, SORT_NUMERIC );
reset ($mxs);
}
return implode(';'$mxs);
}
//On met en place le mailer
$mail = new PHPMailer();
$mail->SetLanguage('fr');
//$mail->SMTPDebug=true;
$mail->Mailer = "smtp";
//on renseigne le sujet
//To do exiger la saisie du sujet
$mail->Subject=$_POST['sujet'];
//SI l'adresse est présente on la renseigne
if($_POST['adresse']) $mail->From=$_POST['adresse'];
$mail->FromName=$_POST['nom'];
//On remplit le corps du message
$sauter=array('nom','adresse','sujet','Action');
$mail->Body ="PHPmailer\n";
while (list($key, $val) = each($_POST)) {
if(!in_array($key,$sauter)) $mail->Body .= "$key : $val\n";
}
//on rajoute l'adresse d'envoi
$Address='xxxxx@wanadoo.fr';
$mail->AddAddress($Address);
// que l'on adressera direcement au MX TODO rechercher automatiquement le MX
$mail->Host=getMX($Address);
if(!$mail->Send())
echo "There has been a mail error sending to ";
?>
Je viens de tester ce code, ca fonctionne plutot bien avec gmail.com mais malheureusement pas avec hotmail.com (en tout cas pas avec mon compte). J'imagine que ca vient des serveurs mails d'hotmail qui bloquent quelque part mais c'est tout de même ennuyant (au final, je pense que j'ai le même problème en passant par le serveur ovh).
BertrandB
10/04/2007, 19h52
Je viens de tester ce code, ca fonctionne plutot bien avec gmail.com mais malheureusement pas avec hotmail.com (en tout cas pas avec mon compte). J'imagine que ca vient des serveurs mails d'hotmail qui bloquent quelque part mais c'est tout de même ennuyant (au final, je pense que j'ai le même problème en passant par le serveur ovh).
en décomentant la ligne du debug on obtient des informations en général pertinentes.
Une solution alternative est de systématiquement passer par un serveur smtp permettant la connexion avec identifiant + mot de passe. Par exemple ouvrir un compte sur laposte.net contrainte FROM doit contenir l'adresse mail correspondant au compte. J'ai essayé ça marche.
J'ai finalement trouver une solution en passant par gmail et en m'appuyant sur l'exemple donné par cette page http://www.buayacorp.com/archivos/phpmailer-con-gmail/ (c'est de l'espagnol mais même moi qui ne le parle pas, j'ai compris).
Il faut télécharger une version modifiée de PHPMailer pour qu'elle prenne en compte le SSL/TLS. Ca fonctionne très bien.
J'avais bien un Warning lors de l'execution mais en ajoutant un @ à la ligne indiquée par le warning le problème c'est réglé.
Par contre les mails arrivent avec le @gmail.com, j'aurais préféré qu'il arrive avec le nom de mon domaine... mais l'avantage c'est que cela fonctionne avec toutes les messageries que j'ai pus tester.
moi j'ai trouvé la solution, j'héberge ma page formulaire sur ovh comme ça les gens sont sur ovh et donc mon adresse en .org mais j'utilise la fonction mail() de free car j'ai un compte chez eux (avant mon site était chez eux).
tout pareil avec la fonction mail() sur un 90plan : les mails arrivent bien à destination mais avec un délai très très long. parfois c'est instantané, parfois c'est plusieurs heures :rolleyes: j'ai pourtant vérifié dans la console d'admin que les mails sont bien partis et non erreur.
ça ne fait pas très sérieux quand les utilisateurs s'inscrivent sur un site et qu'on leur dit qu'un mail d'activation vient de leur être envoyé. forcémment ils doivent attendre une journée avant d'utiliser le site.
J'ai egalement ce probleme, mais peut etre cela vient-t-il du formulaire que j'utilise : http://www.unesourisetmoi.info/formulaires/page2.php
Car malgré le faite que je ne puisse envoyer aucun mail, ou en recevoir, le script ne m'affiche aucune erreur, ou aucun autres commentaire quelqu'il soit...
Le lien donné plus haut fait exactement la même chose, sauf qu'il plante au bout d'un moment !
Comme puis-je reelement tester la fonction mail() de mon 90plan, et dans un autre but, ou puisje trouver un formulaire qui fonctionne ?
merci de vos reponses...:)
Extrait du formulaire en question :
<?php
// N'afficher que les erreurs, pas les avertissements...
ini_set("error_reporting", "E_ALL & ~E_NOTICE");
// Adresse de réception du formulaire
$email_dest = "inscriptions@geek-polo.com";
if ($_POST['envoi']) {
// E-mail headers:
$headers ="MIME-Version: 1.0 \n";
$headers .="From: Geekpolo<postmaster@geek-polo.com>\n";
$headers .="Content-Type: text/html; charset=iso-8859-1 \n";
$subject = "Inscriptions";
$partie_entete = "<html><head>
<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>
</head>
<body bgcolor=#FFFFFF>";
for ($a=1; $a<= $_POST['nbre_champs_texte']; $a++) {
$partie_champs_texte .= "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_champ'.$a] . " = " . $_POST['champ'.$a] . "</font><br>";
}
if ($_POST['nbre_zone_email'] != 0) {
$partie_zone_email = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_email'] . " = " . $_POST['zone_email'] . "</font><br>";
}
if ($_POST['nbre_zones_texte'] != 0) {
$partie_zone_texte = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_zone'] . " = " . $_POST['zone_texte'] . "</font><br>";
$partie_zone_texte = stripslashes($partie_zone_texte);
}
$fin = "</body></html>";
$sortie = $partie_entete . $partie_champs_texte . $partie_zone_email . $partie_zone_texte . $fin;
// Send the e-mail
if (@!mail($email_dest,$subject,$sortie,$headers)) {
echo("Envoi du formulaire impossible");
} else { // Closing if !mail...
// Renvoi à la page de remerciement
header("Location:index.php?page=inscriptionsucces");
exit();
} // Fin du else
} // Closing if edit
?><html><head><title></title><script language="JavaScript">function verifSelection() {if (document.mail_form.champ1.value == "") {
alert("Veuillez saisir votre Prénom")
return false
} if (document.mail_form.champ2.value == "") {
alert("Veuillez saisir votre Nom")
return false
} if (document.mail_form.champ3.value == "") {
alert("Veuillez saisir votre Adresse")
return false
} if (document.mail_form.champ4.value == "") {
alert("Veuillez saisir votre Code postal")
return false
} if (document.mail_form.champ5.value == "") {
alert("Veuillez saisir votre Ville")
return false
} if (document.mail_form.zone_email.value == "") {
alert("Veuillez saisir votre Adresse Email")
return false
}
invalidChars = " /:,;'"
for (i=0; i<invalidChars.length; i++) { // does it contain any invalid characters?
badChar = invalidChars.charAt(i)
if (document.mail_form.zone_email.value.indexOf(badCh ar,0) > -1) {
alert("Votre adresse e-mail contient des caractères invalides. Veuillez vérifier.")
document.mail_form.zone_email.focus()
return false
}
}
atPos = document.mail_form.zone_email.value.indexOf("@",1) // there must be one "@" symbol
if (atPos == -1) {
alert('Votre adresse e-mail ne contient pas le signe "@". Veuillez vérifier.')
document.mail_form.zone_email.focus()
return false
}
if (document.mail_form.zone_email.value.indexOf("@",atPos+1) != -1) { // and only one "@" symbol
alert('Il ne doit y avoir qu\'un signe "@". Veuillez vérifier.')
document.mail_form.zone_email.focus()
return false
}
periodPos = document.mail_form.zone_email.value.indexOf(".",atPos)
if (periodPos == -1) { // and at least one "." after the "@"
alert('Vous avez oublié le point "." après le signe "@". Veuillez vérifier.')
document.mail_form.zone_email.focus()
return false
}
if (periodPos+3 > document.mail_form.zone_email.value.length) { // must be at least 2 characters after the
alert('Il doit y avoir au moins deux caractères après le signe ".". Veuillez vérifier.')
document.mail_form.zone_email.focus()
return false
}} // Fin de la fonction
</script></head><body><form name="mail_form" method="post" action="<?=$_SERVER['PHP_SELF']?>" onSubmit="return verifSelection()">
<div align="center"></div>
<p align="center">
<table width="566" border="0" align="center">
<p align="center">
</p><tr>
<td><font face="Verdana" size="2">Prénom</font></td>
<td><input name="champ1" type="text"></td>
</tr><tr>
<td><font face="Verdana" size="2">Nom</font></td>
<td><input name="champ2" type="text"></td>
</tr><tr>
<td><font face="Verdana" size="2">Adresse</font></td>
<td><input name="champ3" type="text"></td>
</tr><tr>
<td><font face="Verdana" size="2">Ville</font></td>
<td><input name="champ4" type="text"></td>
</tr><tr>
<td><font face="Verdana" size="2">Code postal</font></td>
<td><input name="champ5" type="text"></td>
</tr><tr>
<td width><font face="Verdana" size="2">Email</font></td>
<td width><input name="zone_email" type="text"></td>
</tr><tr>
<td valign="top"><font face="Verdana" size="2">Comment vous nous avez connu ?</font></td>
<td><textarea name="zone_texte" cols="50" rows="10"></textarea></td>
</tr><tr>
<td valign="top"><input name="nbre_champs_texte" type="hidden" id="nbre_champs_texte" value="5">
<input name="nbre_zones_texte" type="hidden" value="1">
<input name="nbre_zone_email" type="hidden" value="1">
<input name="titre_champ1" type="hidden" value="Prénom"><input name="titre_champ2" type="hidden" value="Nom"><input name="titre_champ3" type="hidden" value="Adresse"><input name="titre_champ4" type="hidden" value="Ville"><input name="titre_champ5" type="hidden" value="Code postal"><input name="titre_email" type="hidden" value="Email"><input name="titre_zone" type="hidden" value="Comment vous nous avez connu ?"></td>
<td><div align="center">
<input type="reset" name="Reset" value="Effacer">
<input type="submit" name="envoi" value="Envoyer">
</div></td>
</tr>
</table>
<div align="center"></div>
</form></body></html>
probleme reglé, scritp effectivement foireux!!
@++
Bonjour,
Comme j'ai le problème que vous, j'ai tenté d'utiliser vos solutions.
Seulement je dois être stupide : je n'arrive pas à envoyer de mails.
J'ai repris je code en espagnol qui correspond tout à fait à ce que je veux, mais la connection au serveur SMTP ne se fait pas. J'utilise les serveurs de Laposte.net. C'est le post qui ne convient pas ou bien ?
Bonjour,
J'ai également le même problème.
J'ai suivi cette discussion et il semble qu'OVH ne garantit pas une grande fiabilité sur les délais de réception des emails avec la fonction mail().
Mais est-on tout de même garantit que l'email sera bien reçu ?
Je ne sais pas si je suis très clair. En tout cas, si vous avez des infos je suis preneur.
Bonjour olom.
Si ça peut aider :
Le problème que j'avais venais uniquement de l'ordi sur lequel je faisais les tests. Les codes proposés fonctionnent très bien. Seulement, étant connecté derrière une livebox j'étais soumis aux restrictions du routeur. Ou alors d'Orange, je ne sais pas très bien ... Toujours est-il que sur le serveur OVH je n'ai pas de problèmes.
Pour ce qui est des garantis de réception de mails, je ne peux rien affirmer. Il m'est arrivé que des mails n'arrivent pas. Mais dans l'ensemble tout se passe bien. Par précaution, je conserve quand même une trace des mails importants dans des fichiers textes sur le serveur.
Je n'en sais pas beaucoup plus. Ca répond à la question ?
bonjour, j'ai un kimsufi L
depuis plusieurs jours les sites n'envoient plus aucun email
j'ai tenté maintes fois de relancer le service qmail, rien à faire .. le plus genant est la récupération de mot de passe qui bloquent des personnes
Hum...je ne pense pas que tu sois sur le bon forum pour obtenir de l'aide, ici c'est du mutualisé avec les fonctions d'envoi de mail sont gérées par OVH. Si tu as un problème qMail il vaut mieux demander sur d'autres forums.
bonjour, j'ai un kimsufi L
depuis plusieurs jours les sites n'envoient plus aucun email
j'ai tenté maintes fois de relancer le service qmail, rien à faire .. le plus genant est la récupération de mot de passe qui bloquent des personnes
vBulletin® v.3.8.4, Copyright ©2000-2012, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org