Configurer php pour envoi de mail

Fermé
skad - 9 déc. 2005 à 18:55
 zizou - 12 nov. 2009 à 13:44
Bonsoir.

J'ai instalé appache 2...et php5

et je voudrais savoir comment configurer php.ini pour envoillé un mail a partir d'un formulaire.

dois je instaler un serveur smtp ?
A voir également:

22 réponses

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
14 déc. 2005 à 10:36
Ba çà alors, c'est vraiment dommage !

Bon sérieusement.. j'ai finit par dégoter une machine installée avec PEAR.

Celà "marche" chez moi.

Voilà le code :

<?
# include("PEAR.php");
include("Mail.php");

$recipients = "destinataire@titi.fr";

$headers["From"]    = "envoyeur@toto.com";
$headers["To"]      = "destinataire@titi.fr";
$headers["Subject"] = "Test message";

$body = "TEST MESSAGE!!!";

$params["host"] = "smtp.fai.net";
$params["port"] = "25";


$mail_object =& Mail::factory('smtp', $params);
if (PEAR::isError($mail_object))
{
  print "<p>construction de l'objet 'Mail' ratée car ";
  die($mail_object->getMessage());
} else
{
  print "<p>objet 'Mail'  construit !";
}

$send_result = $mail_object->send($recipients,$headers,$body);
if (PEAR::isError($send_result))
{
  print "<p>envoi de l'email raté car ";
  die($send_result->getMessage());
} else
{
  print "<p>envoyé !";
}

?>

Le fait de déclarer explicitement l'inclusion de PEAR ne sert à rien chez moi (d'ailleur je ne t'ai pas demandé de le faire). Si tu le fais, fait le *avant* tout autre module (avant le include concernant Mail), et non pas après.

Pour tes adresses e-mail, utilise des adresses valides (et non pas "mail_from@domain.mail" qui est un *exemple*).


Dal
6
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
14 déc. 2005 à 10:53
Une dernière chose.. en plus de mes commentaires ci-dessus.

Si ce que tu inséres dans les données provient d'un formulaire, fait en sorte de bien contrôler que ce que tu passes à la fonction Mail ne contient pas de caractères parasites ou des structures de messages destinés à en perturber le fonctionnement (permettant l'exécution de commandes shell avec le process Apache, ou l'encapsulation d'e-mails par des spammeurs détournant ton script).

Ces problèmes sont largement discutés là :

http://fr2.php.net/manual/en/ref.mail.php

A toi de jouer.


Dal
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
12 déc. 2005 à 09:24
.. tu as mal vu.

La voilà (le code est de Roberto Silva) :

<?
include("Mail.php");

$recipients = "mail_to@domain.mail";

$headers["From"]    = "mail_from@domain.mail";
$headers["To"]      = "mail_to@domain.mail";
$headers["Subject"] = "Test message";

$body = "TEST MESSAGE!!!";

$params["host"] = "smtp.server";
$params["port"] = "25";
$params["auth"] = true;
$params["username"] = "user";
$params["password"] = "password";

// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory("smtp", $params);

$mail_object->send($recipients, $headers, $body);
?>


Relis mon message cité ci-dessus sur l'usage des trois derniers paramètres, qui est particulier aux serveur smtp nécessitant une authentification.

Utiliser cet objet PEAR t'évite d'avoir à paramétrer sendmail ou un autre serveur de mail, en utilisant le serveur smtp de ton FAI.


Dal
3
Bon voila j'ai utilisé le scrip fourni plus haut pour voir les erreures:

j'ai donc mis se scrip (en esperant que c'est un code valide)

<?
include("Mail.php");
include("PEAR.php");

$recipients = "lamourouxvincent@wanadoo.fr";

$headers["From"]    = "mail_from@domain.mail";
$headers["To"]      = "lamourouxvincent@wanadoo.fr";
$headers["Subject"] = "Test message";

$body = "TEST MESSAGE!!!";

$params["host"] = "smtp.tele2.fr";
$params["port"] = "25";
$params["auth"] = false;


// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory("smtp", $params);

$mail_object->send($recipients, $headers, $body);

	if (PEAR::isError (send()))
	{
		print "envoi raté car ".send()->getMessage ()."<br />\n";
	}

?>




Et ba au final je n'ai eu aucun messages d'erreurs
2
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
9 déc. 2005 à 20:34
dois je instaler un serveur smtp ?

Non (pas nécessairement),

Utilise Pear :

http://www.commentcamarche.net/forum/affich-1358461


Dal
1

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

Posez votre question
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
12 déc. 2005 à 17:48
Salut skad,

Utilise phpinfo(); pour vérifier si PEAR est installé sur ton système.

S'il ne l'est pas, tu peux l'obtenir là http://pear.php.net et le Package "Mail" là : http://pear.php.net/package/Mail

Contrôle que tu récupères bien des variables avec quelque chose dedans. Tu pourrais essayer avec des données en dur avant.

Il manque des guillements à "false" dans ta ligne $params["auth"] = false;

Ne définit pas username, ni password, puisque "auth" est "false".

Consulte les logs de ton serveur http pour rechercher les erreurs loguées.

La doc de l'objet "Mail" dans PEAR est là : http://pear.php.net/manual/en/package.mail.mail.php


Dal
1
gastongfaim3
28 juin 2008 à 11:56
ni true ni false ne doivent avoir des guillhemets : ce sont des booléens

gaston
0
Le problem c'est que je ne sais pas comment configurer sendmail et ensuite ba il n'y a plus la contribution du 24-janv-2004

peut on m'expliquer comment configurer mon send mail ?
0
Ba merci j'ai du mal lire.....je suis desolé

Encore merci

mais ca ne resould mon problem qu'en parti car j'ai 4 forum qui on comme option l'envoi de mal en cas de reponce....

hors celon ton scrip il faudrais que je mofi leur scrip....

alors peut on medire comment configurer sendmail ?
0
j'ai mit le scrip et je l'ai modifier pour voir acces a mon forumulaire mais....

j'ai mit ca

	include("Mail.php");
	$headers["From"]    = $_POST['add'];
	$headers["To"]      = "lamourouxvincent@wanadoo.fr";
	$headers["Subject"] = $_POST['suget'];

	$body = $_POST['text'];

	$params["host"] = "smtp.tele2.fr";
	$params["port"] = "25";
	$params["auth"] = false;
	$params["username"] = "lamourouxvincent";
	$params["password"] = "none";

	// Create the mail object using the Mail::factory method
	$mail_object =& Mail::factory("smtp", $params);

	$mail_object->send($recipients, $headers, $body);



alors je supose que Mail.php est un fichier que le scrip va chercher dans les libreries.....

enfin je n'arrive pas a faire envoillé un mail
0
Pour false regarde le scrip que tu m'a donne plus haut:
true n'a pas de ""

et ensuite pear est present
et mes variables ont des donnes
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
12 déc. 2005 à 19:27
Hmm.. en supposant toujours que le serveur smtp ne réclame pas d'authentification, retire les lignes "auth", "username" et "password" (supprime les carrément).

As-tu consulté les logs httpd ?

Les fonctions "factory" et "send" de l'objet "mail" renvoient aussi des erreurs en cas de problème d'exécution. Si tu ne trouves pas la cause de ton erreur, elle est sans doutes décrite dans l'objet PEAR_Error retourné.

Utilise PEAR::isError() pour savoir si celà retourne une erreur http://pear.php.net/manual/en/core.pear.pear.iserror.php

et

PEAR_Error::getMessage() pour récupérer le message d'erreur http://pear.php.net/manual/en/core.pear.pear-error.getmessage.php

Enfin, vérifie aussi que tu as le droit d'utiliser le serveur smtp.tele2.fr .. généralement, celà suppose que tu soit connecté avec une IP attribuée par Tele2.


Dal
0
alors pour l'ip je peus car je suis chez tele2 comme fai

et ensuite je vais tester le reste merci
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
13 déc. 2005 à 10:45
Salut Skad,

Je n'ai pas de PHP avec PEAR installé sous la main, mais voilà mon analyse.

1.

"isError" est une fonction de base de PEAR. Elle nécessite un argument. La fonction teste si cet argument est un objet PEAR_Error. Comme l'indique la documentation, le résultat des fonctions PEAR ($mail_object dans ton cas pour le résultat de "factory") devient un objet PEAR_Error en cas d'erreur.

2.

S'agissant du test du résultat de "send", il te faut récupérer ledit résultat dans une variable (par exemple $send_result).

3.

Si $mail_object est un objet PEAR_Error, tu as alors accès, à l'intérieur de cet objet, aux fonctions et données définies par cet objet, et notamment la fonction getMessage. L'accès aux fonctions d'un objet se fait avec la syntaxe $objet->fonction();

Pareil pour "$send_result".

4.

Donc, ton contrôle d'erreur devrait s'écrire plutôt comme çà :

$mail_object =& Mail::factory('smtp', $params); 
if (PEAR::isError($mail_object)) 
{
  print "<p>construction de l'objet 'Mail' ratée car ";
  die($mail_object->getMessage()); 
} else
{
  print "<p>objet 'Mail'  construit !";
}

$send_result = $mail_object->send($recipients,$headers,$body); 
if (PEAR::isError($send_result)) 
{
  print "<p>envoi de l'email raté car ";
  die($send_result->getMessage()); 
} else
{
  print "<p>envoyé !";
}


5.

Tu n'as toujours pas indiqué si tes logs httpd contenaient des erreurs (/var/log/httpd-error.log).


Dal
0
Meci Dal pour cette reponce et surtout cette corection (je sais j'ai des progres a faire mais on doit tous apprendre :p)

Bon sinon pour mon http_log.....je n'y ais rien compris...
Je suis incapable de te dire si il y a une erreure ou pas.

mais je vais tester imediatement ton scrip

merci encore
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
13 déc. 2005 à 14:00
Re :)

Bon sinon pour mon http_log.....je n'y ais rien compris...

Les logs ne sont pas toujours évidents à lire. Il faut aller tout en bas du fichier pour y voir les messages d'erreur les plus récents.

Dans les versions récentes de PHP, par défaut, celui-ci est paramétré pour ne pas afficher les messages sur les pages produites (pour des raisons de sécurité), mais pour les logguer seulement..

Si celà te semble compliqué, et si tes scripts PHP ne sont pas en production, tant que tu débogues tes scrits, tu peux modifier les paramètres de ton php.ini comme celà

error_reporting = E_ALL
display_errors = On
display_startup_errors = On


Après avoir relancé Apache, tu verras les erreurs et les avertissements s'afficher à mesure qu'ils sont générés (s'il y en a).

Quant tes scripts sont au point, rétablit les valeurs display_errors et display_startup_errors en Off (tout en gardant log_errors = On).


Dal
0
Bon j'ai testé le scrip et ba il ne m'affiche rien
0
Bon je te remerci vraiment du fon du coeur DAL
tu es mon sauveur je vais donc adapter ton scrip pour le metre dans ma page...
merci encore
0
omi_girl@hotmail.fr
8 oct. 2007 à 19:28
Bonjour,
redige une lelltre de réclamation au recervveur d la poste pour un colis que tu as envoé en recommandé ett ui n'est pas errivvé à son destinataire
0
comkidiirait
23 nov. 2007 à 15:20
Bonjour,
Alors moi je souhaite savoir si qq1 a déja essayer de travailler avec online.net...

J'ai mis au point toute une solution php pour gérer les campagnes newsletter. Mon problème c'est que leur web master me dis que les scripts php ont une durée d'execution limitée a 60 sec...pas évident pour gérer une liste 2000 inscrits...il me dit aussi qu'on ne pas faire d'authentification smtp via un scipt php....pkoi de telles limitations? avez vous un autres asctuce???

merci
0
Bonjour,

J'ai trouve un de vos questions du vendredi 9 décembre 2005 "http://www.commentcamarche.net/forum/affich 1969090 configurer php pour envoi de mail" poster par Dal et j'ai du réutiliser son code mais je doit essayer de l'evoluer, malheureusement ce n'est plus de mes compettances...

Je doit rajouter un charset pour envoyer un mail en html. est-ce possible avec ce fichier "Mail.php"???
0
sa c'est le top
j'ai pas de problemme avec en plus il verifi si l'adress de l'expediteur est ok



<?php
//-----------------------------------------------------------------------------------------------------------recuperation des variable----------------------------------------------------------------------------------------------
$nom=$_POST['nom'];
$mail_expediteur=$_POST['mail'];
$msg=$_POST['msg'];


//----------------------------------------------------------------------------------------------------------verification des champs-------------------------------------------------------------------------------------------------

if(EMPTY($nom) OR EMPTY($mail_expediteur) OR EMPTY($msg)){
echo '<p>vous devez remplir tous les champ</p>';
?>

<form class="contact" action="envoiemail.php" method="POST">
<p>
<label>Nom: <input type="text" name="nom" value="<?php echo $nom ?>"/></label>
</p>
<p>
<label>email:<input type="text" name="mail" value="<?php echo $mail_expediteur ?>"/></label>
</p>
<p>
<label>message:</label></br><textarea name="msg" col=35 rows=10><?php echo $msg ?></textarea>
</p>
<input type="submit" value="envoyer"/>
</p>
</form>

<?php

}elseif (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $mail_expediteur))
{

$headers ='From: "votre site"<contact@votre site.com>'."\n";
$headers .='Reply-To: contact@votre site.com'."\n";
$headers .='Content-Type: text/html; charset="iso-8859-1"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';

$sujet=' vous avez un message sur votre site.fr';



$mail="ludovic.couture@gmail.fr";


if(mail($mail,$sujet,$msg,$headers))
{
echo 'Le mail a été envoyé';
}
else
{
echo 'Le mail n\'a pu être envoyé';
}

}
else
{
echo 'L\'adresse ' . $_POST['mail'] . ' n\'est pas valide, recommencez !';
}
?>







</body>
</html>


















?>
0