Pb messagerie sous PHP5

masterchris Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   -  
masterchris Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

2 réponses

Kaezzz Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   5
 
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   Statut Membre Dernière intervention   5
 
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   Statut Membre Dernière intervention   5
 
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   Statut Membre Dernière intervention   5
 
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
DuSkii
 
Bonjour,

Essayez cela :

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

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