Wikini

ActionMailToUser

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-18-234-51-17.compute-1.amazonaws.com
Version : 0.2 du 10 décembre 2004
Version de WikiNi Supporté : 0.4.3

Voici une action pour permettre à un visiteur (connecté ou anonyme) d'envoyer un courriel vers un utilisateur enregistré sans afficher l'adresse email de ce dernier. L'adresse de l'utilisateur ne sera pas connue de l'émetteur sauf en cas de réponse du destinataire.

L'action est décomposée en 2 parties :

Pour utiliser cette action il faut ajouter 2 fichiers :

Fichier action/mailtouser.php
<?PHP

// Action pour permettre d'envoyer des mails à un utilisateur
// Licence GPL
// Version 0.1 : 8 dec 2004 Olivier Boyaval
// Version 0.2 : 10 dec 2004 Olivier Boyaval (mailtouser.php : modif pour code xhtml valide + test de l'existance de l'utilisateur).


// Contrôle pour être sûr que l'action est bien appelée par WikiNi
if (!defined("WIKINI_VERSION"))
{
die (
"accès direct interdit");
}

// Récupération des paramètres
$usertomail $this->GetParameter("user");
//$url = $this ->href('sendmailtouser', $this -> GetPageTag());

// Traitements

// Si le paramètre page est vide ou non spécifié on affiche "Le paramètre "user" est manquant."
if (!$this->GetParameter("user"))
{
    echo 
$this->Format("//Le paramêtre \"user\" est manquant.//");
}
//on teste l'existance de l'utilisateur
elseif (!$this->LoadSingle("select name from ".$this->config["table_prefix"]."users where name ='".$usertomail."'"))
{
  echo 
$this->Format("//L'utilisateur ".$usertomail." n'existe pas. L'ActionMailToUser ne peut pas fonctionner//");
}
// Sinon on affiche le formulaire d'envoi du mail
else
{
echo 
$this->FormOpen("sendmailtouser");
?>
<input type="hidden" name="user" value="<?PHP echo $usertomail?>"/>
<h3>Envoi d'un courriel à <?PHP echo $usertomail?></h3>
Adresse E-mail de l'expéditeur
<br />
<input type="text" name="email" size="50" maxlength="70" />
<br />
Titre du message
<br />
<input type="text" name="titre" size="50" maxlength="70" />
<br />
Message
<br />
<textarea name="message" cols="55" rows="8">
</textarea>
<br />
<br />
<input type="submit" name="bouton" value="Envoyer" />
<?PHP
echo $this->FormClose();
//</form>
}

?>


Fichier handlers/page/sendmailtouser.php
<?php
// Handler pour envoyer des mails à un utilisateur par la fonction mail() de php
// Licence GPL
// Version 0.1 : 8 dec 2004 Olivier Boyaval
// Version 0.2 : 10 dec 2004 Olivier Boyaval (mailtouser.php : modif pour code xhtml valide + test de l'existance de l'utilisateur).

//test du format de l'email
//cette fonction n'est pas de moi mais trouvé je ne sais plus où :o(
function mailOk($email) {
  
$ASCII="[[:graph:]]";
  
$CHAINE="^$ASCII{5,40}$";
  
$CARACTERE='[^]()<>@,;:\.["]';
  
$ATOME="$CARACTERE+";
  
$NOM="$ATOME(\\.$ATOME)*";
  
$DOMAINE="$ATOME(\\.$ATOME)*";
  
$ADRESSE="^$NOM@$DOMAINE$";
  
  if (empty(
$email))
    return 
FALSE;
  else
    return 
ereg($CHAINE,$email) && ereg($ADRESSE,$email);
}

// On teste si le script n'est pas appelé en direct
if (!defined("WIKINI_VERSION"))
{
  die (
"accès direct interdit");
}

// Affiche l'en-tête
echo $this->Header();
//Utilisation de la classe CSS de mise en forme des pages
echo "<div class=\"page\">";


// On teste si l'utilisateur peut lire la page
if (!$this->HasAccess("read"))
{
  echo 
$this->Format("//Vous n'avez pas accès à cette page !//");
}
else
{
  
// On teste si l'adresse mail de l'expéditeur a un format correct
  
if (!mailOk($_POST["email"]))
    echo 
$this->Format("//Votre adresse mail est incorrecte//");
  elseif (empty(
$_POST["titre"]))
    echo 
$this->Format("//il manque le titre du message//");
  elseif (empty(
$_POST["message"]))
    echo 
$this->Format("//il manque le corps du message//");
  else
  {
    
$user $this->LoadSingle("select email from ".$this->config["table_prefix"]."users where name ='".$_POST["user"]."'");
    if (!
mailOk($user["email"]))
      echo 
$this->Format("//L'adresse mail de votre destinataire n'est pas valide//");
    else
    {
      
$headers="From: ".$_POST["email"];
      
$erreur=mail($user["email"], $_POST["titre"], $_POST["message"], $headers);
      if (
$erreur)
        echo 
$this->Format("//courriel envoyé à ".$_POST["user"]."//");
      else
        echo 
$this->Format("//**PB** courriel non envoyé à ".$_POST["user"]."---Code erreur ".$erreur."//"); 
    }
  }
     
}

//affiche le pied de page complet
echo "</div>";
echo 
$this->Footer();

?>


Bogues
Pas de bug connus pour l'instant
testé avec la version 0.4.3 de WikiNi et fonctionne chez Free (limite 1000 mail par semaine).



Discussion


Je voulais déjà faire une action comme cela, je pense que c'est possible de le faire avec un seul fichier dans l'action (sans handler) cependant est-ce réellement utile de tester l'adresse mail, ne serait-il pas plus judicieux de voir s'il est possible de modifier le module d'enregistrement des utilisateurs pour cela (histoire de réaliser le contrôle à la source).
Si tu veux on peut s'y mettre ensemble sinon je développe dans mon coin et on compare après...
NOTA: j'avais détourné un CGI de LaPoste.net pour réaliser ça sur mon ancien site ça marchait pas mal.
-- Nicephore17

L'ActionUserSettings est un bon exemple pour faire toute l'opération au niveau de l'action. Je n'ai pas choisi cette solution là c'est tout ;o) maintenant tout peut être améliorer en effet.
Pour la vérification du mail :
-- OlivierB

J'ai toujours pensé que ça servait à rien de vérifier la "validité (syntaxique)" d'une adresse mail, tu as raison, seul l'envoi d'une confirmation par mais est vraiment valable. Quelques point que je voulais évoquer...

Là que j'y pense j'hésite en fait on peut faire pas mal de trucs... comme:


Finalement je sais pas trop quoi faire bien que la dernière solution me plaise beaucoup: il suffirait alors de rajouter une action formatée comme {{MailezMoi}} sur sa "page perso".
Ca me semblerait logique: je veux contacter quelqu'un, je click sur sa page et hoooo... il propose qu'on le mail avec un boooooo formulaire.

Il est tard, je veux pas lancer ce soir, je vais aller me coucher et penser à tout ça, si vous avez des suggestions je suis preneur... Depuis que j'ai déménagé de LaPoste.net, c'est une fonctionnalité qui me manque beaucoup.


Tiens au fait tu as raison, j'ai oublié un test sur l'existance de l'utilisateur :(
je le rajouterai dans l'action dès que j'aurai un moment. fait dans la v 0.2 -- OlivierB

Les objectifs de cette action sont très simples :

Améliorations envisageables :
Cela demanderai une refonte de l'ActionUserSettings donc à voir.
-- OlivierB

Bon mon avis du matin....

Je propose de développer mon action dans la semaine (j'ai vraiment pas beaucoup de temps, je suis nul en programmation et je suis aussi sur ActionNewTextSearch) Elle s'appellera MailMe ou EcrivezMoi. On confrontera après OK?
-- Nicephore17

Sans problème. Mon choix de faire une action + un handler est motivé par la raison suivante : je ne voulais pas que le message d'envoi ou d'erreur soit noyé dans le reste de la page. Si tu écris une action pour envoyer un mail au propriétaire de la page, elle doit être indépendante de l'ActionMailToUser - Le but n'est pas le même ;o)
-- OlivierB

Nicephore17 vous informe qu'il a écrit DiscussionsActionEcrivezMoi
Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]