¿Cómo controlar una aplicación web a través del correo electrónico?¿O cómo ejecutar un script php enviando un correo electrónico?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

Quiero ejecutar una aplicación web en php y mysql, usando el marco CakePHP.Y para mantener el umbral de uso del sitio en un lugar muy bajo, no quiero utilizar el inicio de sesión estándar con nombre de usuario/contraseña.(Y tampoco quiero molestar a mis usuarios con algo como OpenID.Va al tipo de usuario).

Así que estoy pensando que los usuarios podrán iniciar sesión enviando un correo electrónico a login@domain.com sin necesidad de asunto ni contenido.Y recibirán, en respuesta, un correo electrónico con un enlace que les permitirá iniciar sesión (contendrá un hash).También permitiré a los usuarios realizar algunas acciones sin siquiera visitar el sitio, simplemente envíe un correo electrónico a comando@dominio.com y el comando se ejecutará.Asumiré que los usuarios y sus proveedores de correo electrónico se encargan de la seguridad de su cuenta de correo electrónico y, como tal, no es necesario hacerlo en mi sitio.

Ahora, ¿cómo puedo pasar de enviar un correo electrónico a una cuenta que los humanos no leen a ejecutar algún script (básicamente, un "cliente de navegador ficticio" llama a una URL (y cakephp se encargará del resto)?


Nunca antes había usado una tarea cron, pero creo que entiendo su propósito o cómo funcionan en general.No puedo permitir que personas aleatorias que visiten el sitio llamen al script, ya que esa solución no funcionará por varias razones.Creo que me gustaría saber más sobre la posibilidad de ejecutar el script como respuesta a un correo electrónico entrante, si alguien tiene alguna opinión al respecto.Si se ejecuta como una tarea cron, solo se verificará cada X minutos y los usuarios sufrirán un retraso en su respuesta (si lo entiendo correctamente).

Dado que habrá diferentes direcciones de correo electrónico para diferentes comandos, como acceso@ dominio.com y sé qué hacer y cómo hacerlo según el correo electrónico del remitente, ni siquiera necesito el contenido, el asunto ni ningún otro encabezado del correo electrónico.


Hay mucha preocupación por la seguridad de esta aplicación, entiendo los problemas, pero sin revelar mi concepto, no creo que sea un gran problema para lo que estoy haciendo.También en cuanto al tema de usabilidad, realmente no hay ninguno.Simplemente iniciará sesión para proporcionar cambios en el perfil de un usuario cuando necesiten ese y otro comando.Y este es el correo electrónico principal y es muy fácil de recordar y el comienzo de todo este concepto.

¿Fue útil?

Solución

he usado el clase php pop3 con gran éxito (también hay un Módulo POP3 de pera).

Usar la clase pop3 se parece a esto:

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);
}

Lo uso para monitorear un buzón POP3 que alimenta una base de datos.

Lo llama un cronjob que usa wget para llamar a la URL de mi script php.

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

Editar

He estado pensando en la necesidad de que los usuarios envíen ciertos comandos del sitio por correo electrónico.

¿No sería más fácil tener una única dirección a la que se puedan enviar varios comandos en lugar de tener varias direcciones?

Creo que las preocupaciones de seguridad también son bastante válidas.A menos que los comandos no sean destructivos o no hagan nada específico del usuario, el sistema estará abierto a cualquiera que sepa cómo falsificar una dirección de correo electrónico (que serían todos :)).

Otros consejos

Necesitará algún tipo de servicio CronJob/Timer que revise el buzón regularmente y luego actúe en consecuencia.Alternativamente, deberías comprobar si el servidor de correo puede ejecutar un script cuando llega un correo (es decir,vea si es posible colocar un script de filtro de spam y "abusar" de esa funcionalidad para llamar a su script).

Con PHP puro, casi no tienes suerte ya que algo necesita activar el script.En una página con MUCHO tráfico, puede hacer que su index.php o lo que sea haga la verificación, pero cuando nadie visita su sitio durante bastante tiempo, el correo no se enviará y debe tener cuidado con la "carrera". condiciones" cuando varias personas acceden al script al mismo tiempo.

Editar: Solo tenga en cuenta un defecto de usabilidad:Personas con múltiples PC y sin cliente de correo electrónico en cada una.Por ejemplo, uso 4 PC, pero solo 1 (la principal) tiene instalado un Cliente de correo y uso Webmail para consultar las demás.Ahora bien, iniciar sesión y enviar un correo a través de Webmail no es la mayor usabilidad: para usar SU sitio, primero tengo que iniciar sesión en OTRO sitio, redactar un correo a través de la interfaz de mierda que tienen la mayoría de las herramientas de Webmail y esperar respuesta.También podría usar OpenID allí :-)

Si tu servidor lo permite puedes usar un .adelante archivo o correo electrónico para iniciar un proceso (php o cualquier cosa) cuando llega un correo a una dirección determinada.

No desea molestar a los usuarios con OpenID, pero quiere que se ocupen de este esquema de correo electrónico.En primer lugar, el correo electrónico puede tardar mucho en enviarse.No hay ningún tiempo garantizado en el que se entregará un correo electrónico.Ni siquiera está garantizado que el correo electrónico llegue allí.Sé que las cosas suelen ser rápidas, pero no es raro que se necesiten hasta 10 minutos para completar un viaje de ida y vuelta.Además, a menos que esté cifrando el correo electrónico, el enlace que está enviando se envía abiertamente.Eso significa que cualquiera puede usar ese enlace para iniciar sesión.Dependiendo de qué tan seguro quieras estar, esto puede ser un problema o no, pero definitivamente es algo en lo que pensar.Usar un método de inicio de sesión no estándar como este supondrá mucho más trabajo del que probablemente vale la pena y realmente no veo ninguna ventaja en todo el proceso.

También estaba pensando en usar procmail para iniciar algún script.También existe formail, que puede resultar útil para cambiar o extraer encabezados.Si tiene acceso de administrador al servidor de correo, también puede usar /etc/aliases y simplemente acceder a su script.

Además de los problemas de usabilidad, deberías pensar realmente en la seguridad: en realidad, es bastante sencillo enviar un correo electrónico con una dirección de remitente falsa, por lo que no confiaría en ello para nada crítico.

Estoy de acuerdo con todas las preocupaciones de seguridad.Su suposición de que "los usuarios y sus proveedores de correo electrónico se encargan de la seguridad de su cuenta de correo electrónico" no es correcta cuando se trata de la dirección de correo electrónico del remitente.

Pero como usted preguntó específicamente "¿cómo puedo pasar de enviar un correo electrónico a una cuenta que los humanos no leen a ejecutar algún script?", recomiendo usar procmail para entregar el correo electrónico entrante a un script que usted escriba.

No llamaría a una URL.Haría que el script realizara el trabajo leyendo el mensaje enviado en la entrada estándar.De esa manera, nadie en el sitio web podrá acceder al script.

Para configurar esto, la dirección de correo electrónico que proporciona a sus usuarios deberá estar asociada con un usuario real en el sistema.En el directorio de inicio de ese usuario, cree un archivo llamado ".procmailrc"

En ese archivo, agregue estas dos líneas:

:0 hb:
| /path/to/program

Donde/ruta/a/programa es la ruta completa del script o programa para manejar el mensaje entrante.Luego cree el script con un código similar a este:

#!/usr/bin/php
<?php

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

?>

El mensaje de correo electrónico no permanecerá en el buzón, por lo que si desea guardarlo o registrarlo, haga que el script lo haga.

--
bruce

Reconsideraría seriamente este enfoque.El correo electrónico no tiene una confiabilidad muy alta.Hay todo tipo de filtros de spam que pueden interceptar correos electrónicos con enlaces, dejando así el "comando" a medio terminar, sin mencionar los riesgos de seguridad.

Es muy fácil falsificar la dirección del remitente de un correo electrónico.Básicamente estás abriendo tu sistema a cualquiera.

Además, en lugar de una combinación de nombre de usuario y contraseña, de repente requiere que los usuarios recuerden una lista de comandos para colocar delante de una dirección de correo electrónico.Sería mejor proporcionarles un nombre de usuario/contraseña y luego darles acceso a una página de ayuda.

En otras palabras, la usabilidad y seguridad de este esquema obtienen una puntuación muy baja.

Realmente no puedo encontrar ninguna ventaja en este enfoque que ni siquiera se acerque a compensar las enormes desventajas.

Una solución para prevenir el spam es asegurarse de que la primera línea, la última línea o una línea específica contenga una cadena determinada, casi como una contraseña, pero es mejor una oración completa.

Sólo tienes la palabra o palabras, bastante seguro, solo recuerda borrar los correos después de su uso y los que no tengan la línea secreta.

Aparte de la seguridad y usabilidad, la entrega de correo electrónico puede ser otro problema.Dependiendo del proveedor de correo electrónico del usuario, la entrega del correo electrónico puede retrasarse desde unos minutos hasta unas horas.

Hay una historia educativa realmente bonita en thedailywtf.com sobre diseño de software.La cuestión planteada debería resolverse mediante un diseño adecuado, no mediante techo-woopla.

Alexander, lee la historia vinculada y piensa en guantes, no en la navegación por páginas web mediante correo electrónico.

PHP no es un martillo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top