Envoyer à un ami

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Faut pas pusher ! S’envoyer une page web sympa repérée sur la machine d’un copain, faire parvenir à un ami le super article qui lui confirme ce dont vous parliez le matin même : c’est toujours utile ! Spip permet de faire ça assez facilement, profitons-en.

Pour envoyer une page web, il n’est pas forcément nécessaire d’envoyer l’intégralité de la page mais seulement le contenu de la page, pour cela il nous faut créer un couple squelettique usuel appelons le mailami.php3/html (cf. pièces jointes).

Il pourra être très inspiré du squelette proposé par ARNO* sur uzine pour le format « imprimable », le but est le même. Mais libre à vous de le modifier à votre guise !

Une fois votre couple squelettique réalisé (dans le fichier joint ce sont les fichiers mailami.php3 et mailami.html), vous allez pouvoir créer deux fichiers php :

-  Le formulaire qui prend les adresses : appelons-le formulaire.php.

Il sera du type :

<form method="post" action="mailarticle.php" enctype="multipart/form-data">
Envoyer l'article &agrave;&nbsp;(entrez l'email du destinataire) :
<br><input name="adresse" size="40" value=""><br>
De la part de&nbsp;(entrez votre email) :
<br><input name="From" size=40 value=""><br>
<center><input type="submit" value="Envoyer"></center>
<input type="hidden" name="id_article" value="<?php echo "$id_article"; ?>">
</form>

C’est un formulaire post classique, qui appelle le script d’envoi du mail que nous détaillerons juste après. Notez le dernier champ : "<?php echo "$id_article"; ?>

, il signifie au formulaire d’envoyer au script non seulement les adresses email qui seront rentrées dans les cases mais également le numéro de l’article demandé. Il nous faudra donc penser à mettre cette valeur dans l’url d’appel au script. Mais l’équipe de spip a pensé à nous car comme pour le couple squelettique imprimer.php3/html il suffira d’utiliser la balise #ID_ARTICLE pour que spip remplace cette balise par sa valeur chiffrée.

Le formulaire est fait, il envoie donc au script de traitement : l’email de l’envoyeur ($From) et l’adresse de celui qui recevra le mail ($adresse) et bien sûr, en caché, $id_article qui est le numéro de l’article.

-  Le formulaire de traitement et d’envoi, appelons le mailarticle.php. Le voici :

<?
$sujet="Le titre de votre message";
$from="From: Ce que vous voulez sauf l'email<$From>\r\n";
$from.="Reply-To: Postmaster <postmaster@votresite.com>\n";
$from.="X-priority:3\n";
$texte="http://www.votresite.com/mailami.php3?id_article=$id_article";
$fr=fopen($texte,"r");
while(!feof($fr)){
   $recup = '';
   while(!feof($fr)){
      $recup .= fgets($fr,1024);
   }
}
fclose($fr);
$from.="MIME-Version: 1.0\r\n";
$from.="Content-Type: text/html";
$msg="$recup";
if (mail($adresse,$sujet,$msg,$from))
echo("<center><font color=\"green\"><br><br><br><h1>Articlebien envoy&eacute;
&agrave; $adresse de votre part ($From)!</h1></font></center>");
else
echo("<center><font color=\"red\"><br><br><br><h1>Probl&egrave;me &agrave;
l'envoi du mail...d&eacute;sol&eacute;</h1></font></center>");
?>

Personnalisez le :
Donnez un sujet, une adresse de retour, mettez les paramètres de VOTRE site.

Voilà l’essentiel est fait, votre script fonctionne.

Voyons maintenant comment intégrer plus joliment cette fonctionnalité à votre page article.html (squelette de votre article) :

Ajoutez simplement cette ligne à l’endroit où vous souhaitez faire apparaître cette fonction (bien sûr il faudra faire une image « envoyer.gif » !) :

<a HREF="#" onClick="window.open('./formulaire.php?id_article=#ID_ARTICLE','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=300, height=300');return(false)"><img src="./images/envoyer.gif" alt="envoyez cet article &agrave; vos amis" border="0"></a>

Le formulaire s’ouvrira alors dans un popup, ce qui est déjà plus esthétique, et signifiera ainsi au visiteur que tout s’est bien passé.

Autre astuce : un script reste un script , il peut y avoir un bug de sécurité, il est toujours intéressant de s’assurer qu’il fonctionne de façon normale en logguant le nombre d’envois et les IP des envoyeurs. Il vous faut alors créer un fichier envoyerami.txt (chmod 755) dans le même répertoire et compléter le script de traitement par ces quelques lignes :

$filename="envoyerami.txt";
$fl=fopen($filename,"a+");
fwrite($fl,"'$REMOTE_ADDR'|'$HTTP_USER_AGENT'|'$id_article'\n");
fclose($fl);

Discussion

36 discussions

  • Y’aurait-il moyen de faire vérifier que les champs du formulaire sont bien remplis avant l’envoi.
    Car ici, meme si on valide avec des champs vide, l’envoi est pris en compte.
    Merci pour vos lumières !

    Répondre à ce message

  • 4

    Pour mon site Evopsy, j’ai effectue qqs modifications au package original :

    -  Ajout du titre de l’article envoyé dans le sujet du mail
    -  Ajout de commentaires (optionnels)
    -  Ajout d’informations au fichier envoiami.txt (Big brother !)

    Je ne sais pas si ca intéressera quelqu’un, mais le fichier zip est disponible à l’adresse ci-après (toutes les explications sont incluses).

    Merci

    Philippe

    • Besoin d’aide. je recois tout le code html ???

    • Mathieu

      Hello,
      Avec ta version améliorée, l’envoi par le formulaire se passe bien, mais l’adresse dans le mail que l’ami reçoit est incorrecte
      http//www.monsite.com/article.php3?id_article=< blink>

      J’ai tout essayé pour faire disparaitre ce blink, mais rien n’y fait..
      Dans le titre du mail, il n’y a pas non plus le titre de l’article..

      Que faire ?
       :-/

    • Bip !

      pour supprimer le tag blink il faut ajouter le filtre supprimer_tags dans le squelette comme ceci :
      (#RESULTAT

    • Merci Philippe, pour ces ajouts au déjà bien pratique script d’origine.

      Stéphane

    Répondre à ce message

  • 3

    Warning : fopen(« envoyerami.txt », « a+ ») - Permission denied in /home/monsite/www/mailarticle.php3 on line 34

    Warning : fwrite() : supplied argument is not a valid File-Handle resource in /home/monsite/www/mailarticle.php3 on line 35

    Warning : fclose() : supplied argument is not a valid File-Handle resource in /home/monsite/www/mailarticle.php3 on line 36

    QUE FAIRE ?

    • oups : j’ai donné la réponse en privé mais j’ai oubllié le forum : en fait il faut faire un chmod 777 chez ovh...

    • ben maintenant lorsque j’envoi un mail j’ai « Article bien envoyé à de votre part () ! ». Mais jamais le mail n’arrive... Pas de bol hein ?!!

    • salut bob :-)

      si le script marque que l’envoi s’est effectué c’est que la fonction mail s’est bien exécutée avec tous ses paramètres comme ils ont été renseignés, si tu ne reçois pas le message c’est que ces paramètres ne sont pas bons.
      Ceux par défaut son valides. :-)

      Essaye encore en modifiant les variables que tu as mises.

    Répondre à ce message

  • 3

    Rebonjour,

    Toujours dans la poursuite d’un idéal..

    Voilà :

    1 : est-il possible que le curseur soit placé automatiquement dans le premier champ « envoyer à » ?

    2 : l’ensemble fonctionne mais si je clique sur les liens à l’intérieur de mes rubriques ou de mes articles, ils sont relatifs au document...
    ex : rubrique.php3/ ?id_rubrique=31
    et non http://www.monsite.fr/rubrique.php3/?id_rubrique=31

    avez vous une solution ?

    à bientôt et merci d’avance

    annabelle

    • 1/ oui, tu fais ça avec du javascript : vla un exemple là
      http://www.toutjavascript.com/savoir/savoir06_3.php3#truc1

      2/J’ai pas compris la question... le script est en relatif par défaut mais comme il est intégré dans la page, ça ne change rien.
      A toi de changer les url si tu le souhaites.

      Dis anabelle, c’est pas pour être désagréable mais...elles ont rien à voir du tout avec le script tes questions si ? ;-)

    • Bonjour,

      Mea culpa, je ne recommencerai plus. D’accord pour le point 1. Et merci pour l’adresse.

      Mais pour le point 2 cela me semble vraiment être en adéquation avec le script.

      Je m’explique. Je reçois la page web dans mon logiciel de messagerie. Le script fonctionne merveilleusement. Mais si ce texte posséde des liens entre rubriques ou articles ils ne reprennent pas l’ensemble de l’adresse du site. Ainsi quand je clique sur un lien présent dans le texte j’ai une erreur de protocole :
      http://rubrique.php3/?id_rubrique=31
      ou http://article.php3/?id_article=35

      Suis je plus précise ? dis ? j’suis pas hors sujet ?

      annabelle

    • Salut anabelle,

      bon ok, pour la 2e question t’es pas (trop) HS ;-)

      Ben en fait, c’est juste dans le squelette du mail (couple squelettique) que tu mets tes url en complet avec #URL_SITE/#URL_RUBRIQUE etc...

      oki ?

    Répondre à ce message

  • 2
    fredbref@yahoo.fr

    mailarticle.php : parse error, expecting `ELSEIF’ on line 7
    $from.=« Reply-To : Postmaster \n » ;

    c’est le message d’erreur que me délivre le script après avoir appuyer sur envoi...

    que se passet-t-il ?

    • Désolé mais sur ton lien je ne vois pas de formulaire à tester...ceci dit, si ton script te demande un « elseif », c’est qu’il y a un « if » en trop avant...
      Le script n’est pas le script original...tu epux le donner dans le message stp ?

    • j’ai remis le lien sur ma page... message d’erreur :

      mailarticle.php : parse error, expecting `ELSEIF’ on line 4
      $from.=« Reply-To : Postmaster \n » ;

    Répondre à ce message

  • 6
    Annabelle

    Bonjour,

    Je voudrais que l’adresse Mail de l’expéditeur apparaisse au lien de « un ami etc » Savez vous comment je peux réaliser ce tour de passe passe ?

    merci d’avance

    ap

    • Bonjour,

      il faut remplacer cette ligne :
      $from="From: Ce que vous voulez sauf l'email<$From>\r\n";

      par celle-là :
      $from="From: $From <$From>\r\n";

      mais attention : ce n’est pas conforme aux recommandations en matière de mail : une adresse email n’est pas un nom d’utilisateur !

    • Bonjour,

      Merci infiniment pour votre réponse.

      Je peaufine.
      En fait je voudrais un formulaire pour l’envoi du texte d’une rubrique où l’internaute saisit son nom, son e-mail et l’e-mail du destinataire.

      le voici :

      <html><title>formulaire d'envoi</title>
      <body bgcolor="#A9D53A">
      <form method=POST action="mailrubrique.php" enctype="multipart/form-data">
        Envoyer le texte de cette rubrique&nbsp;<br>
       
        <i>e-mail du destinataire</i><br>
        <input name="adresse" size=40 value="">
        <br>
      De la part de&nbsp;<br>
        <i>nom de l'exp&eacute;diteur</i><br>
        <input name="Nom"  size="40" value=""><br><br>
        <i>e-mail de l'expéditeur</i><br>
        <input name="From" size=40 value=""><br><br>
      <center>
          <input type=submit value="Envoyer la rubrique par e-mail">
        </center>
      <input type=hidden name="message" value=1>
      <input type=hidden name="id_rubrique" value=<? echo("$id_rubrique"); ?>
      </form>
      </html>

      Seulement après je ne sais pas comment configurer mon mailrubrique.php3 afin d’afficher ces informations..

      merci d’avance

      annabelle

    • Bonjour,

      il suffit de faire une page avec des boucles rubrique au lieu des boucles articles, c’est un problème ?

      je vois pas trop le problème là, désolé ;-)

    • Bonsoir,

      Je m’exprime mal. Ok pour les boucles.
      Seulement je souhaite que dans la réception du courriel s’affiche
      De : le nom de l’expéditeur avec son adresse mail.
      En fait, le même système que sur le monde.fr

      à +

      annabelle

    • Bonjour,

      en fait ce nom tu ne peux pas l’inventer, il faut donc rajouter un champ de saisie dans le formulaire pour le récupérer (par exemple dans une variable $nom_envoyeur) PUIS dans ton mailami.php3 remplacer « un ami » par $nom_envoyeur.

      C’est tout.
      Sinon je t’ai indiqué plus haut déjà comment mettre l’email de la personne qui envoie à la place du nom (même si ce n’est pas très correct...), le principe est le même : tu y mets juste une variable récupérée dans le formulaire.

      ok ?

    • Bonjour,

      Tout fonctionne merci beaucoup

      annabelle

    Répondre à ce message

  • 1

    Bonjour,

    Je souhaiterais ajouter un lien « envoyer à un ami » sur certaines pages de mon site. Novice en php, j’ai suivi votre méthode. J’arrive à obtenir le formulaire à remplir mais lorsque je le valide, le code du formulaire de traitement et d’envoi s’affiche en pop-up et je ne reçois aucun mail. Je n’arrive pas à identifier l’erreur. Comment puis-je remédier à ce problème ?

    Aussi, je ne suis pas sûre d’avoir compris comment insérer des numéros d’article dans l’url d’appel au script. Pouvez-vous m’en dire davantage svp ?

    Enfin, dernière question, est-il possible de constituer une base de données des adresses e-mails de l’émetteur et du destinataire ?

    Merci beaucoup d’avance pour votre aide précieuse et bonne journée.

    • Bonjour ingrid,

      hum...t’es sûre que tu as lu l’article ? ;-)

      =>le numéro de l’article est passé dans le lien ( avec #id_article)
      =>les données peuvent être stockées dans un fichier texte (c’est marqué en fin d’article)
      =>tous les items sont personalisables.

      Donc n’hésites pas : tu relis, tu essaies et tu réécris ici pour les problèmes non résolus avec les points précis qui posent problème B-)

    Répondre à ce message

  • 2
    claude cardot

    bonjour à tous

    Mon problème est que je dois envoyer des images contenues dans mes articles et que le calcul du squelette leur met une adresse relative et que pas conséquent elles ne s’affichent pas une fois arrivé dans outlook.
    Quelqu’un aurait une solution à me proposer ?

    • Trop facile ;-)

      dans ton squelette de message html :
      place un meta basehref="http://www.tonsite.com/" et lors de l’affichage les images seront chargés ;-)

    • Merci pour ta réponse plus que rapide. Je ne connaissais pas ce tag-là.

    Répondre à ce message

  • 2

    Moi j’ai un soucis de "« " et de "n\’" ou encore de "d\’" qui apparaissent dans le message envoyé. Comment y remédier ?

    Merci !

    • Bonjour,

      pour y remédier il suffit de supprimer ces /n et ces d/ dans le fichier source de ton script :-)

    • Ma boucle est celle-ci :

      Un amis vous recommande d’aller voir cette page : (#TITRE
      [(#INTRODUCTION|supprimer_tags|texte_script)] Lire l’article : #URL_SITE_SPIP/#URL_ARTICLE

      Je ne vois pas ou supprimer les « trucs qui gènent » dans l’email envoyé...

    Répondre à ce message

  • Juste pour améliorer le code php :

    ob_start();
    require("mapage.php3");
    $texte = ob_get_contents();
    ob_end_clean();

    mes 2 cents

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom