Envoyer d'un clic un mail sans formulaire de saisie

WRInaute accro
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.
 
WRInaute accro
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.
 
WRInaute accro
Leonick a dit:
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.
 
WRInaute accro
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 ?
 
WRInaute accro
Voici ce que j'ai fait
Code:
// 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:
//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:
// 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:
$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. :)
 
WRInaute accro
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.
 
WRInaute accro
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)
 
WRInaute accro
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:
<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.
 
WRInaute accro
Pour scinder la variable en deux autres distinctes.
Code:
$param = $_POST['param'];
$param1 = substr($param,0,5);
$param2 = substr($param,5,6);
 
WRInaute accro
Solution avec url dans le mail.
Code:
// 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.
 
Discussions similaires
Haut