Envoyer d'un clic un mail sans formulaire de saisie


salva
WRInaute accro
WRInaute accro
 
Messages: 4273
Inscription: 16 Avr 2006

Envoyer d'un clic un mail sans formulaire de saisie

Message le Jeu Nov 17, 2011 11:20

Bonjour,

Je souhaite envoyer par mail une variable à l'admin.
Ce mail serait expédié par le clic sur un lien texte donc sans formulaire de saisie.
Un pop-up de confirmation d'envois de mail avec un bouton "Ok" clôturerait l'action.

Evidemment, il faudrait que les robots/spammeurs en tout genre ne puissent lire ni l'email de l'admin, ni suivre le lien.

Est-ce faisable? Auriez-vous une piste?

Merci.


spout
WRInaute accro
WRInaute accro
 
Messages: 4378
Inscription: 14 Mai 2003

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Jeu Nov 17, 2011 11:23

Tu peux mettre un input hidden qui se rempli au mouvement de la souris.
http://www.webdesignfromscratch.com/javascript/human-form-validation-c ... eck-trick/


salva
WRInaute accro
WRInaute accro
 
Messages: 4273
Inscription: 16 Avr 2006

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Jeu Nov 17, 2011 12:45

Merci pour le lien.
Les commentaires sont mitigés quant à la sécurité. J'ai cherché un peu sur google, l'intermédiaire du captcha semble incontournable.


spout
WRInaute accro
WRInaute accro
 
Messages: 4378
Inscription: 14 Mai 2003

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Jeu Nov 17, 2011 13:00

Bcp d'avis sur les captcha sont mitigés, cfr. article super intéressant:
http://coding.smashingmagazine.com/2011/03/04/in-search-of-the-perfect-captcha/

Il doit il y avoir d'autres techniques dans ton cas (cookie, session, token, AJAX, referrer, ...) , et la première chose à faire serait de ne pas afficher l'e-mail en clair.


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Jeu Nov 17, 2011 18:30

le plus simple serait un onclick sur le lien avec l'appel (en ajax) du script d'envoi de mail


spout
WRInaute accro
WRInaute accro
 
Messages: 4378
Inscription: 14 Mai 2003

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Jeu Nov 17, 2011 19:00

+1 Leonick. Sans onclick directement, juste un listener sur le lien.


salva
WRInaute accro
WRInaute accro
 
Messages: 4273
Inscription: 16 Avr 2006

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Jeu Nov 17, 2011 19:07

Leonick a écrit:le plus simple serait un onclick sur le lien avec l'appel (en ajax) du script d'envoi de mail
Je vais jeter un oeil de ce côté. Merci à vous deux.


zeb
WRInaute accro
WRInaute accro
 
Messages: 4555
Inscription: 5 Déc 2004

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Jeu Nov 17, 2011 21:09

Leonick a écrit:le plus simple serait un onclick sur le lien avec l'appel (en ajax) du script d'envoi de mail

ou sur une image ce qui règle direct le problème du lien.
edit : pour la solution ajax, le mail sera sur le serveur donc pour l'avoir faut se lever de bonne heure.


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Jeu Nov 17, 2011 21:55

je n'ai pas tout compris à ce que tu souhaitais faire : juste avoir comme information qu'un lien a été cliqué ou avoir d'autres infos ?


salva
WRInaute accro
WRInaute accro
 
Messages: 4273
Inscription: 16 Avr 2006

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Sam Nov 19, 2011 21:52

Voici ce que j'ai fait
Code: Tout sélectionner
// Fonction de creation de l'objet XMLHttpRequest
function getXhr()
{
   if(window.XMLHttpRequest)
      xhr = new XMLHttpRequest();
   else if(window.ActiveXObject)
   { 
      try
      {
         xhr = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e)
      {
         xhr = new ActiveXObject("Microsoft.XMLHTTP");
      }
   }
   else
   {
      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest, veuillez le mettre à jour");
      xhr = false;
   }
}

//Fonction qui envoie la variable
function envoiMail(param)
{
   var data = "param="+param;
   xhr.open("POST", "/script_envois.php", true);
   xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   xhr.send(data);
   alert('Votre alerte sera étudiée dans les plus brefs délais. Merci pour votre concours !');
}

Code: Tout sélectionner
//Contenu script_envois.php
<?php

$param = $_POST['param'];

  $headers  = "From: \"toto\"<toto@titi.fr>\n";
  $headers .= "Reply-To: toto@titi.fr\n";
  $headers .= "X-Priority: 1\n";
  $headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  $headers .= "Content-Transfer-Encoding: 8bit";

  $subject  = 'Alerte contenu !';

  $message  = "Url \n";
  $message .= $param;

  $result = mail('xxxxx@gmail.com', $subject, $message, $headers);

?>

Code: Tout sélectionner
// div du clic
<div  class="div_alert" onClick="getXhr(); envoiMail(<?php echo $row->id ?>);">
Alerte contenu
</div>

J'arrive bien à envoyer par mail 1 et une seule variable.
Mais dès que je souhaite envoyer $linkTarget ci-dessous, la valeur n'est pas définie.
Code: Tout sélectionner
$linkTarget = sefRelToAbs( "index.php?option=$option&page=show_ad&adid=".$row->id."&catid=".$row->category."&Itemid=".$itemid); echo $linkTarget;
$linkTarget représente l'url de la page où se trouve le div du clic qui envoie le mail. Et je souhaiterai envoyer $linkTarget sous forme d'url dans le mail que je reçois.

J'ai la tête qui fume et je ne vois plus rien. Un ptit coup de main please. :)


zeb
WRInaute accro
WRInaute accro
 
Messages: 4555
Inscription: 5 Déc 2004

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Dim Nov 20, 2011 10:35

essaie en GET c'est beaucoup plus simple :

Dans le javascript d'envoie
xhr.open("GET", "/script_envois.php?param="+document.location, true);

Dans le script de mail côté serveur
$param = $_GET['param'];

Le seul truc que j'ai pas regardé c'est si tu passait d'autre datas en POST (là ça prend juste en compte l'url)
Sinon j'ai eu aussi des soucis en post avec ajax, de mémoire il me semble que j'ai laissé tombé pour une autre solution.


zeb
WRInaute accro
WRInaute accro
 
Messages: 4555
Inscription: 5 Déc 2004

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Dim Nov 20, 2011 10:38

J'oubliais ... fait une petite vérification dans script_envois.php avant d'envoyer ton mail pour savoir si le référent est bien ton site (histoire d'éviter de se faire bombarder par un petit futé qui aurait lu ton javascript)


salva
WRInaute accro
WRInaute accro
 
Messages: 4273
Inscription: 16 Avr 2006

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Dim Nov 20, 2011 15:20

Merci zeb pour ta suggestion. J'ai tenté sans succès.

Par contre, j'ai réussi à passer 2 variables en procédant comme ci-dessous et ça me suffit pour l'instant :)
Code: Tout sélectionner
<div  class="div_alert" onClick="getXhr(); envoiMail(<? echo $row->id ?><? echo $row->item ?>);">
Alerte contenu
</div>
J'ai le sentiment que seuls les chiffres passent en paramètre.

Edit: je récupère un nombre à 7 chiffres.
J'imagine qu'il est possible en php de transformer ce nombre en deux variables distinctes: une variable contiendrait les cinq premiers chiffres et la deuxième variable les deux dernier chiffres restant.

Je pourrai ainsi reconstituer l'url dans le script d'envoi avant l'envoi.


salva
WRInaute accro
WRInaute accro
 
Messages: 4273
Inscription: 16 Avr 2006

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Dim Nov 20, 2011 16:47

Pour scinder la variable en deux autres distinctes.
Code: Tout sélectionner
$param = $_POST['param'];
$param1 = substr($param,0,5);
$param2 = substr($param,5,6);


salva
WRInaute accro
WRInaute accro
 
Messages: 4273
Inscription: 16 Avr 2006

Re: Envoyer d'un clic un mail sans formulaire de saisie

Message le Dim Nov 20, 2011 19:05

Solution avec url dans le mail.
Code: Tout sélectionner
// le div du clic
// comme seuls les chiffres passent en paramètres, j'ai rajouté le séparateur 123454321 qui me sert
// à reconstituer l'url
<div  class="div_alert" onClick="getXhr(); envoiMail(<? echo $row->id .'123454321'. $row->category; ?>);">
Alerte contenu
</div>

//le script d'envoi
<?php
$param = $_POST['param'];
// je récupère ma chaine et remplace mon séparateur (qui est unique)
// par une partie de l'url que je reconstitue petit à petit
$param1 = str_replace("100050001","/catid,","$param");
  $headers  = "From: \"tot\"<toto[@t]titi.fr>\n";
  $headers .= "Reply-To: toto[@t]iti.fr\n";
  $headers .= "X-Priority: 1\n";
  $headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  $headers .= "Content-Transfer-Encoding: 8bit";

  $subject  = 'Alerte contenu !';
// reconstruction restante de l'url
  $message  = "Url \n";
  $message .= "http://www.partie_restante_de_lurl,";
  $message .= $param1;
// le slash final
  $message .= "/";


  $result = mail('mon_email', $subject, $message, $headers);

?>

Merci encore une fois aux intervenants.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


cron