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

  • 6
    cjanson

    Bonjour,
    lorsque j’envoie un email avec cet excellent script, j’ai des « / » à la place de « ’ » et quelques fois , pas toujours, (!) des « &nbsp » qui remplace un espace dans les articles.

    que dois je faire ?
    est ce un probleme de norme HTML ?

    • Peux tu nous dire lequel des package tu as installé et un adresse où tester ton problème s’il te plait ?

    • ok voici un extrait d’un email recu :

      "Un ami vous recommande de lire cet article :

      Titre : Le dossier : comment sauver les retraites nbsp ; ?

      « Retraites nbsp ; : Où veut-on aller nbsp ; ? Comment y aller nbsp ; ? La réforme des
      avantages familiaux en matière de retraite Quelques principes pour une vraie
      réforme des retraites ».

      constat : il y a des « nbsp ; » avant les caracteres « speciaux » comme «  : », «  ? ».

      j’ai retire le ET avant nbsp ; (touche 1 en miniscule) car lorsque je valide le msg, le forum le transforme en espace.. suis je clair ?

      dans le sujet du mail, voici ce que cela donne :
      « Recommandation d\’un article »

      j’utilise la version Envoyer_ami_texte
      et la « norme »

      $from.=« Content-Type : text/plain » ;
      dans mon fichier mailarticle.php

      voila,

    • J’ai resolu ce probleme en remplacant tous les filtres par uniquement « |textebrut ».

      En esperant que ca puisse aider (il me reste deux autres problemes a regler : le droit d’acces, et un « eacute » intempestif dans la date).

      PG

    • excellent ce filtre "-textebrut.
      probleme résolu.

      par contre, probleme non resolu concernant le sujet du mail :
      « Recommandation d’un article »
      donne toujours
      « Recommandation d\’un article »
      chez tous les webmails sauf mon email chez Wanadoo.

      etrange...

    • Salut,

      en fait là je ne vois pas trop le probleme : c’est TOI qui donne le titre au message :-)
      S’il n’y a pas d’apostrophes dans ton titre il n’y aura plus de problème de \
      Sinon, il faut rajouter :
      $sujet=stripslashes($sujet) ;

      that’s all folks

    • Impec ! probleme resolu.
      Quel talent !

    Répondre à ce message

  • 1

    La fonction « envoyer texte seul » renvoie un message vide si on n’as pas rempli le champ « Description ». C’est dommage ! N’y a-t’il pas moyen de palier à cela ?

    • Salut,

      ben en fait c’est toi qui décides ce que tu veux envoyer en le paramétrant dans mailarticle.html

      <BOUCLE_MailArt(ARTICLES){id_article}{doublons}>
      Un ami vous recommande d'aller voir cette page :
      [(#TITRE|supprimer_numero)]
      [(#INTRODUCTION|supprimer_tags|texte_script)]
      Lire l'article : #URL_SITE_SPIP/#URL_ARTICLE
      </BOUCLE_MailArt>

      Donc, tu le modifies comme tu veux ce texte :-)

    Répondre à ce message

  • 1
    Patrice HARDOUIN

    Je ne suis pas arrivé à paramétrer automatiquement le nom du site (avec #NOM_SITE_SPIP) et l’url (avec #URL_SITE_SPIP) dans le fichier mailarticle.php3. Je serais très intéressé par une possibilité de ce côté pour intégrer cette fonctionnalité aux Bio-Squelettes.

    • Patrice HARDOUIN

      Merci Philippe pour ton aide. C’est fait, la fonction envoyer à un amis est intégrée pour la version 2.2 des Bio-Squelettes. Je vais la peaufiner un petit peu pour l’intégrer plus aux squelettes et faire une version article complet en mode texte (comme pour le journal le Monde)

    Répondre à ce message

  • 2

    Voila, j’ai enfin trouvé :

    message pour les autres débutants chez qui cela ne fonctionnerait pas. Les confirmés, passez votre chemin... ;-)

    Dans votre fichier article, dans la ligne :

    a HREF=« # » onClick="window.open(’./formulaire.php ? et le reste...

    Ajouter « 3 » entre php et ?

    P.S ; j’ai aussi viré le ./ avant formulaire, je ne sais pas si c’était nécessaire.

    Espérant être utile...

    • Bonjour,

      visiblement il y a un 3 qui a sauté dans un fichier...peux tu nous dire quel package tu as téléchargé pour qu’on le corrige ?

      merci

    • Patrice HARDOUIN

      C’est pas dans un package, c’est dans le script de la page qu’il a sauté le 3 : <code(’./formulaire.php ?id_article=#ID_ARTICLE’,

      C’est la portion de code à insérer pour lancer le Pop-Up.

    Répondre à ce message

  • 2

    salut,

    voilà l’erreur quil me met, et je ne sais pas à quoi cela correspond. Si un de vous peut m’aider et me dire quoi faire.

    mailarticle.php : parse error, expecting `ELSEIF’ on line 4
    $from.=« X-priority:3\n » ;

    Il me met la mem erreur pour la ligne précédente de mailarticle.php (postmaster...)

    Merci à vous :)

    • Bonjour,

      tu peux mettre « # » devant ces deux lignes et voir si ça marche ?
      cela les désactivera et comme elles ne sont pas indispensables...

      Tu nous dis si ça fonctionne comme ça ?

      merci

    Répondre à ce message

  • 3

    Ne fonctionne pas non plus chez moi (hébergeur:phpnet.org)

    Une fenêtre de la bonne taille s’ouvre au clic, mais avec erreur 404.

    dans mailarticle :

    $texte="http://tempo2.phpnet.org/keskon/mailami.php3?id_article=$id_article" ;

    Que faut-il modifier ?

    Merci en tous cas pour tous ces ajouts « spipiens »...

    • Salut,

      tu as un espace en trop entre article.php3 et le ?

      j’ai essayé ton url c’est bon sinon.

      par contre change le texte de mailarticle.html (un amiS) il y a une lettre en trop ou alors ce sont des amis cachés... ;-)

    • « Ils ont des yeux et ils ne voyent pas... »

      Parabole de Saint... guyd.

      Merci à toi pour ta réponse hyper-méga-super rapide.

      Je modifie cela dès ce soir.

      P.S : pour te remercier, sers toi une bière ici :

      http://tempo2.phpnet.org/keskon/rubrique.php3?id_rubrique=14

      (virtuelle, hélas...):o)

    • Hélas, 3 X hélas, ce n’est pas ça...

      Je pense que l’espace avant le «  ? » vient de la « tendance spipienne » à ajouter des espaces avant et après les signes de ponctuation. (bien utile, par ailleurs...)

      Mais donc, dans le fichier original, la ligne est correcte !

      Je ne sais trop ou chercher le problème...

      D’avance merci de votre aide.

    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