Pb messagerie sous PHP5

Fermé
masterchris Messages postés 82 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 8 juillet 2011 - 29 juin 2010 à 11:14
masterchris Messages postés 82 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 8 juillet 2011 - 29 juin 2010 à 14:50
Bonjour,
dans une partie de mon site j'envoie des mails aux utilisateurs pour les informés que leur traitements sont OK, j'utilise la fonction mail de php et j'ai configuré le serveur SMTP. Quand ce serveur mail est disponible tout fonctionne bien, mais quand pour une raison ou une autre il n'est pas accessible une page d'erreur est générée et les utilisateurs sont bloqués sur cette page. Ma question est la suivante:

Y a t'il un moyen de tester si le serveur mail est disponible avant d'utiliser la fonction mail de php ppour éviter l'erreur?
Sinon est-il possible de capturer l'erreur (try-catch en java) pour capturer l'erreur et afficher un message à l'utilisateur?

J'utilise Apache 2.2 et PHP5

2 réponses

Kaezzz Messages postés 18 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 29 juin 2010 5
29 juin 2010 à 11:21
Bonjour,

Voici un exemple :

try
{
mail(....,...,...);
}
catch (Exception $e)
{
echo 'Echec d'envoi du mail pour la raison suivante : ', $e->getMessage(), "\n";
}
1
masterchris Messages postés 82 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 8 juillet 2011 5
29 juin 2010 à 11:27
Je débute en PHP5:
Y a t il une classe à invoquer avant d'utiliser ton code?
0
Kaezzz Messages postés 18 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 29 juin 2010 5
Modifié par Kaezzz le 29/06/2010 à 11:34
De mémoire non, essaye et tiens moi au courant.

La solution de Duskii est plus simple à comprendre et à utiliser.
0
masterchris Messages postés 82 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 8 juillet 2011 5
29 juin 2010 à 14:50
Ok merci, ça fonctionne! je n'ai testé que le code de kaezzzzz. j'en ai trouvé un plus complexe mais bcp plus intéressant sur www.developpez.com :
/**
* @desc Notre classe d'exception pour les erreurs PHP
*/
class MyPHPException extends Exception
{
/**
* @desc Constructeur
*/
public function __construct($msg, $code, $file, $line, $context)
{
$this->message = $msg;
$this->code = $code;
$this->line = $line;
$this->file = $file;
$this->context = $context;
parent::__construct($msg, $code);
}
/**
* @desc Affichage de l'erreur
*/
public function showError()
{
echo 'PHP a généré l\'erreur système suivante : ['.$this->code.' | '.
$this->getMessage().'] à la ligne '.
$this->line.' du fichier '.$this->file;
// $Mytrace contient le contexte de l'exception
// $this->context contient le contexte de l'erreur
$Mytrace = $this->getTrace();
//print_r($Mytrace);
if ( ! empty($Mytrace['1']['function'] ))
{
echo ' sur la fonction '.$Mytrace['1']['function'];
}
echo '<br /><br/>Contexte lors de l\'erreur :<br/><pre>';
print_r($this->context);
echo '</pre>';
}
}
/**
* @desc la fonction de callback, chargée de lancer l'exception
*/
function errorToException($code, $msg, $file, $line, $context)
{
throw new MyPHPException($msg, $code, $file, $line, $context);
}
// redéfinition de la gestion d'erreur
set_error_handler('errorToException');
// Enfin, notre script
try
{
mail(....,...,...); 
}
catch (MyPHPException $myPHPException)
{
echo '<div style="color:red">'.$myPHPException->showError().'</div>';
}


Encore merci à tous
0
Bonjour,

Essayez cela :

<?php
if(@mail())
{
echo "message";
}
else
{
echo "erreur";
}
?>

Le "@" sert a cacher l'erreur.
0