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 à (entrez l'email du destinataire) :
<br><input name="adresse" size="40" value=""><br>
De la part de (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é
à $adresse de votre part ($From)!</h1></font></center>");
else
echo("<center><font color=\"red\"><br><br><br><h1>Problème à
l'envoi du mail...désolé</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 à 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);
Discussions par date d’activité
36 discussions
stephadami@hotmail.fr
Répondre à ce message
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 ?
A mon avis, l’hébergeur a besoin du chemin complet (http:// voire le chemin complet vers le site) et pas seulement le nom du fichier (c’est pas donné dans l’article).
Cf. www.php.net
non sa change rien j’avais commencé par sa... bizarre
On peut voir online ? ou au moins le message d’erreur ?
http://www.halflifexpert.com/hldswiki/noplay/mailarticle.php3?id_article=61
quoi que je mette j’obtient ce message d’erreur, que ce soit avec l’url du fichier ou avec le nom du fichier
salut,
visiblement le chemin de ton mailami.php3 n’est pas bon car il n’est pas trouvé par mailarticle.php3
Les erreurs indiquées après sont « normales » pour un fichier non trouvé...
renseignement pris c’est le même probléme que l’auto syndication chez certains hébergeurs.
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 ?
Répondre à ce message
Et si on n’a pas d’ami ?
Ben alors ptet pour envoyer à un ennemi :->
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.
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é
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
Répondre à ce message
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+
Répondre à ce message
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
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 !
Répondre à ce 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
Répondre à ce 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
Répondre à ce 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
Répondre à ce 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
Répondre à ce message
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 :
Cordialement
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 :
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.
Suivre les commentaires : |