Envoyer à un ami

All contributions published for previous SPIP versions

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);

updated on 24 September 2004

Discussion

36 discussions

  • marc simoncini

    stephadami@hotmail.fr

    Reply to this message

  • 7

    j’ai un problémé apparament mon hébergeur n’a pas l’air d’accepter d’utiliser fopen pour une url. N’y aurais t’il pas un moyen plus simple?

    Reply to this message

  • 6
    Stéphane

    Et si on n’a pas d’ami ?

    • Ben alors ptet pour envoyer à un ennemi :->

    • Stéphane

      plus sérieusement,
      j’ai testé le script, mais suis embêté par la restriction de mon FAI qui a mis la directive allow_url_fopen sur off. Mais je me suis dit alors que tout se passe en local chez mon hebergeur et ai modifié le fichier mailarticle en remplacant la ligne 6 par $texte=“mailami.php3?id_article=$id_article”;

      Aucun succès. Quelqu’un aurait-il une idée ?
      L’envoi de mail fonctionne pour les inscriptions donc je suis un peu perplexe.

      Stéphane

      PS : mais si, j’ai des amis.

    • Stéphane

      Quelques précisions concernant mon précédent message :
      L’erreur renvoyée est :

      Warning: fopen(): Unable to access mailami.php3?id_article= in /var/...../mailarticle.php on line 7

      Je souhaite simplement tester l’envoi de mail à travers un formulaire.
      Mon site spip arrive bien a envoyer un mail à ceux qui souhaitent accéder à l’espace rédacteur, donc je m’étonne que je n’y arrive pas avec ce script.
      Un petit coup de main serait le bienvenu.
      Merci d’avance.

    • Bonjour,

      malheureusement si tu n’as pas accès à fopen() il est certain que tu vas avoir du mal à ouvrir puis à lire le fichier.

      Il me semble (regarde dans les messages anciens du forum) qu’il y avait un hébergeur qui posait ce problème et qu’une fonction de remplacement avait été proposée mais là je ne m’y connais pas assez pour te dire.

      désolé

    • Stéphane

      En fait, je débute en php.
      Mon FAI, wanadoo premium ne m’autorise pas de allow_url_fopen mais en local je suppose que cette fonction devrait tourner.
      Quoi qu’il en soit, certaines choses vont bien d’autres non.

      Par exemple, la syndication ne fonctionne pas car le fichier backend a ouvrir est sur un autre serveur.
      Par contre une chose qui va bien, c’est l’inscription des futurs rédacteurs. un mail leur est bien envoyé. Comment ?

      J’aimerai dans un de mes articles faire afficher un formulaire, qui m’envoye un mail contenant certains champs du formulaire.
      Le formulaire s’affiche bien, mais le mail n’est pas envoyé. j’avais écris le script en utilisant la fonction mail(4arguments).
      Spip utilise t-il cette fonction pour envoyer ses mails, ou une autre existe t-elle ?
      Y a-il des règles a respecter concernant les arguments (du genre utiliser une adresse email du FAI) ou non.
      En tout cas aucun mail ne me parvient.

      Merci pour votre aide.

    • pierre mon frere et fore car il peus caser les dens de toi

    Reply to this message

  • 1

    Bonjour,
    Est-il possible d’utiliser ce script pour un site non-SPIP ? l’ensemble des documents me paraît adaptable au php (mais bon, euh, comment dire... je débute un peu quand même ;o) mais j’ai un souci avec la variable $id_article.
    Merci

    • ya pa de copyright spip...
      l’id_article c’est le numéro de l’article pour spip, tu y mets ce que tu veux...

      a+

    Reply to this message

  • 7
    jl richard

    Bonjour,
    “envoyer à un ami” fonctionne très bien sur mon site www.arcol.asso.fr (spip, version 1.6, serveur mutualisé OVH php4) mais ne marche plus sur mon nouveau site www.nsfa.asso.fr (spip version 1.7, serveur dédié OVH, php4)!
    Est-ce que c’est une question de compatibilité script avec version spip (les scripts sont identiques sur les 2 sites) ou bien est-ce un problème de serveur?
    Merci d’avance pour toute aide.

    • Bonjour,

      j’ai effectivement testé sur ton site, je n’ai pas d’idée précise mais visiblement c’est entre le remplissage du formulaire et le traitement du mail qu’il y a problème : les variables ne passent pas! Cherche les problèmes d’espace

    • jl.richard

      Bonsoir,
      En effet, aucune variable ne passe entre article.html (id_article) et formulaire.php3 ni adresse, From... ensuite. Un enregistrement vide est ajouté dans envoyerami.txt à chaque essai.
      Est-ce que d’autres utilisateurs ont ce problème avec spip 1.7?
      J’ai vérifié attentivement les scripts article, formulaire et mailarticle.
      A part les problèmes d’espace, est-ce que tu as d’autres pistes?

    • Ben en fait non, pas à ma connaissance mais je ne suis pas chez OVH :-)

      Il faut :

      -  essayer de voir si tu peux bien récupérer tes varaibles dans l’url sur ton serveur.
      -  tester les variables les lignes les unes après les autres en remplaçant leur contenu par du texte pur et dur pour voir où ça merdoie.
      -  si ça marche pas ben...chsé pas :-(

    • Bonjour,
      Ca marche! J’ai fait un couple php3/html pour formulaire et mailarticle, comme il existait pour mailami. Je ne sais pas pourquoi mais le résultat est là.
      Merci pour le script et pour ton aide.
      JL

    • Bjr, j’ai le meme probleme. Ca fonctionne en 1.6 et plus en 1.7. Pourriez vous me transmettre votre solution ?

      Merci,
      Bob.

    • même problème, ca cherche, ca cherche mais cela n’envoit pas de mail. Si celui qui a trouvé la solution pouvait publier les fichiers, ca serait sympa de sa part !

      Merci A+

    • La réponse est simple : depuis quelques temps, OVH à demandé à ce que les fichiers sur leurs serveurs n’aient pas d’autorisation supérieure à 755 (CHMOD).

      Or, les fichiers téléchargeables ici un des permissions > 755, ce qui crée une erreur 500 chez OVH.

      En chmodant tous les fichiers de cet excellent package sur 755, ça fontionne super bien !

    Reply to this message

  • bonjour j’ai mis votre dossier dézippé sur mon site mais j’ai des erreurs on me répond:

    Warning: fopen() [function.fopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /mnt/149/sda/5/b/ /envoyer_ami_html/mailarticle.php3 on line 8

    Warning: fopen(http://URL_site/mailami.php3?id_article=) [function.fopen]: failed to open stream: Success in /mnt/149/sda/5/b/ /envoyer_ami_html/mailarticle.php3 on line 8

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b/ /envoyer_ami_html/mailarticle.php3 on line 9

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b/ /envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Warning: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Warning: feof(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 11

    Fatal error: fgets(): supplied argument is not a valid stream resource in /mnt/149/sda/5/b//envoyer_ami_html/mailarticle.php3 on line 12

    Merci d’avance pour votre aide

    Reply to this message

  • Bonjour,

    Je découvre seulement cette possibilité, envoyer une page à un ami, il me semble avoir tout fait, j’ai modifié le mailarticle.php et pourtant ...... ça ne marche pas, en cliquant sur le message “envoyer à vos amis” j’ai un popup qui s’ouvre avec à l’interieur “http://404 non trouvé, la page est introuvable”.

    Voilà je cherche et je ne trouve pas.

    Si quelqu’un pouvait m’aider, merci d’avance

    Reply to this message

  • Bonjour,
    Ce script m’interesse vraiment beaucoup, mais je suis passé à la version 1.9 et j’ n’arrive pas à l’installer, donc si quelqu’un pouvais me donner un coup de pouce...

    Merci d’avance

    Reply to this message

  • bonjour a tous, je n’ai aucun soucis pour envoyer une page mais est il possible d’envoyer une image a un ami ?
    Merci

    Reply to this message

  • 8

    J’ai essayé la contrib mais je plante lamentablement !

    Warning fopen

    (http://raforum.apinc.org/mailmai.php3?id_article=1000): failed to open stream:

    Connection timesd out in /space_3/creagh/mailarticle.php3 on libe 8

    Warning feof(): supplied argument is not a valid stream resource in /space_3/creagh/mailarticle.php3 on libe 9

    etc.

    Pas d’idées ?

    JMB

    • Salut,

      visiblement t’as un problème sur mailarticle.php3 il tourne en boucle sans aller à la fin du script.
      Il faut tester les variables envoyées une à une et voir laquelle plante le script.

      J’ai regardé apinc est hébergé chez nexen et nexen a toutes les fonctions qu’il faut pour que le script marche : reste le problème des données qui plantent le script...

      courage :-)

    • La réponse de APINC

      Il n’est pas possible de faire un fopen sur un autre site heberge sur
      Apinc (probleme lie au cluster).

      Faut s’inspirer ce ca pour contourner le probleme:

      http://aide.apinc.org/wakka.php?wiki=FopenEnLocal

    • Y a un problème de boucle, c’est clair... Et ça vient de me donner 293 Mo de logs d’erreurs PHP aujourd’hui même !

      Quand on fait un fopen, il faut tester le résultat derrière, car en cas de fichier non trouvé le test !feof est toujours vrai => boucle sans fin.

      De plus, quid d’un $id_article qui contiendrait du javascript ou autre ? Il faudrait le blinder en forçant une conversion en nombre avec (int), par exemple, sinon bonjour les attaques possibles...

      C’est vraiment dommage de gâcher une bonne idée avec du développement à la va-vite ! Faites un peu attention à programmer proprement...

    • Y a un problème de boucle, c’est clair... Et ça vient de me donner 293 Mo de logs d’erreurs PHP aujourd’hui même !

      Quand on fait un fopen, il faut tester le résultat derrière, car en cas de fichier non trouvé le test !feof est toujours vrai => boucle sans fin.

      De plus, quid d’un $id_article qui contiendrait du javascript ou autre ? Il faudrait le blinder en forçant une conversion en nombre avec (int), par exemple, sinon bonjour les attaques possibles...

      C’est vraiment dommage de gâcher une bonne idée avec du développement à la va-vite ! Faites un peu attention à programmer proprement...

    • Y a un problème de boucle, c’est clair... Et ça vient de me donner 293 Mo de logs d’erreurs PHP aujourd’hui même !

      Quand on fait un fopen, il faut tester le résultat derrière, car en cas de fichier non trouvé le test !feof est toujours vrai => boucle sans fin.

      De plus, quid d’un $id_article qui contiendrait du javascript ou autre ? Il faudrait le blinder en forçant une conversion en nombre avec (int), par exemple, sinon bonjour les attaques possibles...

      C’est vraiment dommage de gâcher une bonne idée avec du développement à la va-vite ! Faites un peu attention à programmer proprement...

    • Y a un problème de boucle, c’est clair... Et ça vient de me donner 293 Mo de logs d’erreurs PHP aujourd’hui même !

      Quand on fait un fopen, il faut tester le résultat derrière, car en cas de fichier non trouvé le test !feof est toujours vrai => boucle sans fin.

      De plus, quid d’un $id_article qui contiendrait du javascript ou autre ? Il faudrait le blinder en forçant une conversion en nombre avec (int), par exemple, sinon bonjour les attaques possibles...

      C’est vraiment dommage de gâcher une bonne idée avec du développement à la va-vite ! Faites un peu attention à programmer proprement...

    • Y a un problème de boucle, c’est clair... Et ça vient de me donner 293 Mo de logs d’erreurs PHP aujourd’hui même !

      Quand on fait un fopen, il faut tester le résultat derrière, car en cas de fichier non trouvé le test !feof est toujours vrai => boucle sans fin.

      De plus, quid d’un $id_article qui contiendrait du javascript ou autre ? Il faudrait le blinder en forçant une conversion en nombre avec (int), par exemple, sinon bonjour les attaques possibles...

      C’est vraiment dommage de gâcher une bonne idée avec du développement à la va-vite ! Faites un peu attention à programmer proprement...

    • Eh oh :

      • C’est une contrib
      • C’est une contrib qui date et qui a été améliorée depuis
      • L’intérêt de l’open source c’est justement de montrer le source aux autres pour qu’ils le corrigent, l’optimisent l’améliorent.
      • Et une dernière remarque: je ne suis pas programmeur et j’ai fait à l’époque cette contrib car j’en avais besoin et que personne d’autre ne voulait le faire :-)

      Cordialement

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom