Comment contrôler une application web via e-mail?Ou comment faire pour exécuter un script php en envoyant un e-mail?

StackOverflow https://stackoverflow.com/questions/46777

  •  09-06-2019
  •  | 
  •  

Question

Je veux lancer une application web avec php et mysql, en utilisant le framework CakePHP.Et pour garder le seuil de l'utilisation du site, à très peu de place, je veux pas utiliser la norme de connexion avec le nom d'utilisateur/mot de passe.(Et je ne veux pas de soucis mes utilisateurs avec quelque chose comme OpenID soit.Va pour le type d'utilisateur.)

Donc je pense que les utilisateurs seront en mesure de se connecter par l'envoi d'un e-mail à login@domain.com avec aucun objet ou le contenu requis.Et ils seront, en réponse, un email avec un lien qui vous permettra de connecter entre eux dans (il contiendra une table de hachage).Aussi je vais laisser les utilisateurs faire quelques gestes sans même visiter le site, il suffit d'envoyer un e-mail avec command@domain.com et la commande sera effectué.Je vais supposer que les utilisateurs et leurs fournisseurs de services de messagerie prend en charge leur e-mail compte de la sécurité et en tant que tel il n'est pas nécessaire pour cela sur mon site.

Maintenant, comment dois-je faire à partir d'un email est envoyé à un compte qui n'est pas lu par les humains pour qu'il soit lancé quelques script (en fait un "dummy navigateur client", qui appelle une url( et le cakephp va prendre soin de tout le reste)?


Je n'ai jamais utilisé une tâche cron avant, mais je pense comprendre leur but ou la façon dont ils fonctionnent.Je ne peux pas avoir le script sera appelé par des gens au hasard en visitant le site, que cette solution ne fonctionne pas pour plusieurs raisons.Je crois que j'aimerais entendre plus au sujet de la possibilité d'avoir le script à exécuter en tant que réponse à un courriel de venir, si quelqu'un a des entrées à tous sur ce point.Si c'est exécuter une tâche cron il ne serait que de vérifier toutes les X minutes et les utilisateurs d'obtenir un décalage dans leur réponse (si je comprends bien).

Depuis, il y aura différentes adresses e-mail pour les commandes différentes, comme connexion@domain.com et je sais quoi faire et comment le faire sur le fondement de l'email de l'expéditeur, je n'ai pas même besoin de le contenu, le sujet ou tout autre en-tête de l'e-mail.


Il y a beaucoup de vous soucier de la sécurité de cette application, je comprends les problèmes, mais sans donner mon concept, je ne pense pas que c'est un gros problème pour ce que je suis en train de faire.Également sur le problème de convivialité, il n'y a vraiment pas de tout.C'est juste va être de connexion pour effectuer des changements sur un profil d'utilisateur si/quand ils en ont besoin et d'une autre commande.Et c'est la principale e-mail et est très facile à retenir et le début de ce concept.

Était-ce utile?

La solution

J'ai utilisé le pop3 classe php avec un grand succès (il y a aussi un Poire module POP3).

À l'aide de pop3 de classe ressemble à quelque chose comme ceci:

require ('pop3.php');

$pop3 = new pop3_class();
$pop3->hostname = MAILHOST;
$pop3->Open();
$pop3->Login('myemailaddress@mydomain.com', 'mypassword');

foreach($pop3->ListMessages("","") as $msgidx => $msgsize)
{
    $headers = "";
    $body = "";

    $pop3->RetrieveMessage($msgidx, $headers, $body, -1);
}

Je l'utilise pour surveiller une boîte aux lettres POP3 qui alimente une base de données.

Elle est appelée par une tâche cron qui utilise wget pour appeler l'url de mon script php.

*/5 * * * * "wget -q --http-user=me --http-passwd=pass 'http://mydomain.com/mail.php'" >> /dev/null 2>&1

Modifier

J'ai réfléchi à votre besoin d'avoir les utilisateurs d'envoyer certaines commandes par e-mail.

Ne serait-il pas plus facile d'avoir une adresse unique qui plusieurs commandes peuvent être envoyées plutôt que d'avoir plusieurs adresses?

Je pense que les problèmes de sécurité sont très valables aussi.À moins que les commandes sont non-destructif ou qui ne font rien de spécifique à l'utilisateur, le système sera grande ouverte pour tous ceux qui savent comment faire pour usurper une adresse e-mail (ce qui serait tout le monde :) ).

Autres conseils

Vous aurez besoin d'une sorte de tâche cron/Timer Service qui vérifie la Boîte aux lettres régulièrement et agit sur elle.Sinon, vous devriez vérifier le serveur de courrier si l'on peut exécuter un script lorsqu'un mail arrive (c'est à direvoir si il est possible de mettre un filtre anti-spam-script et "abus" que de la fonctionnalité d'appel de votre script à la place).

Avec pur PHP, vous êtes souvent hors de la chance que quelque chose doit déclencher le script.Sur un Pagewith BEAUCOUP de trafic, vous pourriez avoir votre index.php ou que ce soit l'enregistrement, mais quand personne ne visite votre site depuis un certain temps, puis l'e-mail ne sera pas envoyé, et vous devez être prudent de "race conditions" lorsque plusieurs personnes sont l'accès au script en même temps.

Edit: Il suffit de garder une convivialité faille à l'esprit:Les gens avec Plusieurs Pc et sans un Client de Messagerie sur chacune d'elle.Par exemple, j'utilise 4 PCs, mais seulement 1 (mon principal) est un Client de Messagerie installé, et j'utilise le Webmail de vérifier les autres.Maintenant, l'enregistrement et l'envoi d'un mail via le Webmail n'est pas la plus grande facilité d'utilisation - l'utilisation de VOTRE site, je dois d'abord vous connecter à un AUTRE site, rédiger un mail par le biais de l'interface de merde la plupart du Webmail outils ont et attendre la réponse.Pourrait tout aussi bien utiliser OpenID là :-)

Si votre serveur le permet, vous pouvez utiliser un .avant fichier ou Procmail pour démarrer un processus (php ou autre) lorsqu'un mail arrive à une certaine adresse.

Vous ne voulez pas les tracas des utilisateurs avec OpenID, mais que vous souhaitez pour faire face à cette e-mail système.Tout d'abord, le message peut prendre beaucoup de temps pour passer à travers.Il n'y a pas garanti le temps d'un e-mail sera livré dans.Il n'est même pas garanti que l'e-mail va y arriver à tous.Je sais que les choses sont généralement rapide, mais il n'est pas rare de prendre jusqu'à 10 minutes pour un aller-retour pour être complété.Aussi, sauf si vous êtes le chiffrement du courrier électronique, le lien vous de l'envoi de retour est envoyé dans l'ouvert.Cela signifie que n'importe qui peut utiliser ce lien pour vous connecter.Selon un comment sûr que vous voulez être, ce qui peut ou peut ne pas être un problème, mais il est certainement quelque chose à penser.À l'aide d'un non-standard de la méthode d'identification, comme cela va être beaucoup plus de travail que cela vaut probablement la peine, et je ne vois pas vraiment d'avantages à l'ensemble du processus.

Je pensais aussi utiliser procmail pour lancer un script.Il est également formail, qui pourrait venir dans maniable pour modifier ou extraire les en-têtes.Si vous avez accès à l'administration de serveur de messagerie, vous pouvez également utiliser le fichier /etc/aliases et tout tuyau à votre script.

En plus des problèmes d'utilisation, vous devriez vraiment penser à la sécurité - il est en fait assez simple d'envoyer un email avec une fausse adresse de l'expéditeur, donc je ne voudrais pas compter sur elle pour quoi que ce soit critique.

Je suis d'accord avec tous les problèmes de sécurité.Votre hypothèse que "les utilisateurs et leurs fournisseurs de services de messagerie prend en charge leur compte de messagerie de sécurité" n'est pas correct quand il s'agit de l'expéditeur de l'e-mail.

Mais depuis que vous avez spécifiquement demandé: "comment dois-je faire à partir d'un email est envoyé à un compte qui n'est pas lu par les humains pour qu'il soit lancé quelques script", je vous recommande d'utiliser procmail pour livrer le courrier entrant à un script que vous écrivez.

Je ne voudrais pas appeler une URL.Je voudrais que le script effectuer le travail par la lecture du message envoyé sur l'entrée standard.De cette façon, le script n'est pas acessible à tous sur le site web.

Pour cela, l'e-mail que vous fournissez à vos utilisateurs auront à être associé à un utilisateur réel sur le système.Dans ce répertoire home de l'utilisateur, créez un fichier appelé ".procmailrc"

Dans ce fichier, ajoutez ces deux lignes:

:0 hb:
| /path/to/program

Où /chemin/vers/le programme est le chemin complet du script ou d'un programme pour la manipulation le message entrant.Puis créer le script avec le code quelque chose comme ceci:

#!/usr/bin/php
<?php

$fp=fopen('php://stdin','r');
while($line = fgets($fp)) {
    [do something with each $line of input here]
}

?>

Le message e-mail ne restera pas dans la boîte aux lettres, donc si vous voulez enregistrer ou enregistrer dans un fichier, le script le faire.

--
Bruce

Je voudrais sérieusement reconsidérer cette approche.E-mail n'a pas une très haute fiabilité.Il y a toutes sortes de les filtres anti-spam qui pourrait intercepter des e-mails avec des liens ce qui rend la "commande" à moitié fini, pour ne pas mentionner les risques de sécurité.

Il est très facile d'usurper l'identité de l'expéditeur d'adresse, un e-mail.Vous êtes essentiellement l'ouverture de votre système à tous.

Aussi, au lieu d'un nom d'utilisateur/mot de passe, vous êtes tout d'un coup obligeant l'utilisateur à se souvenir d'une liste de commandes à mettre en face d'une adresse de courrier électronique.Il serait préférable de leur fournir un nom d'utilisateur/mot de passe, puis en donnant accès à une page d'aide.

En d'autres termes, la convivialité et la sécurité de ce schéma scores très bas.

Je ne peux pas vraiment trouver des avantages à cette approche qui vient même près de l'emporter sur le massif des inconvénients.

Une solution pour éviter le spam, assurez-vous que la première ligne, dans la dernière ligne ou une ligne spécifique contenant une certaine chaîne de caractères, un peu comme un mot de passe, mais une phrase entière, c'est mieux.

Seulement vous avez le mot ou les mots, assez sécurisé, n'oubliez pas de supprimer les mails après utilisation, et de ceux qui n'ont pas le secret de la ligne.

En dehors de la sécurité et de convivialité, la livraison de courrier électronique peut être un autre problème.En fonction de l'utilisateur du fournisseur de messagerie, e-mail, la livraison peut être retardée de quelques minutes à quelques heures.

Il est un très joli conte pédagogique sur thedailywtf.com sur la conception de logiciels.L'poser la question devrait être résolue par une conception appropriée, non pas par techo-woopla.

Alexander, veuillez lire liés histoire et de penser à gants, pas d'e-mail-driven page de navigation.

PHP n'est pas un marteau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top