Как управлять веб-приложением через электронную почту?Или как запустить PHP-скрипт, отправив электронное письмо?

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

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хочу запустить веб-приложение на PHP и MySQL, используя платформу CakePHP.И чтобы порог использования сайта был на очень низком уровне, я хочу не использовать стандартный логин с логином/паролем.(И я также не хочу утомлять своих пользователей чем-то вроде OpenID.Переход к типу пользователя.)

Поэтому я думаю, что пользователи смогут войти в систему, отправив электронное письмо на адрес login@domain.com без необходимости указания темы или содержания.И в ответ они получат электронное письмо со ссылкой для входа в систему (она будет содержать хэш).Также я позволю пользователям выполнять некоторые действия, даже не посещая сайт: просто отправьте электронное письмо с адресом command@domain.com, и команда будет выполнена.Я предполагаю, что пользователи и их провайдеры электронной почты заботятся о безопасности своих учетных записей электронной почты, и поэтому на моем сайте в этом нет необходимости.

Теперь, как мне перейти от того, чтобы электронное письмо было отправлено на учетную запись, которую люди не читают, и там был запущен какой-то скрипт (по сути, «фиктивный браузерный клиент» вызывает URL-адрес (а Cakephp позаботится обо всем остальном)?


Я никогда раньше не использовал cron, но думаю, что понимаю их цель и то, как они обычно работают.Я не могу позволить, чтобы скрипт вызывался случайными людьми, посещающими сайт, поскольку это решение не будет работать по нескольким причинам.Я думаю, мне хотелось бы услышать больше о возможности запуска сценария в ответ на входящее электронное письмо, если кто-нибудь вообще имеет какое-либо мнение по этому поводу.Если он запускается как задание cron, он будет проверять только каждые X минут, и у пользователей будет задержка в ответе (если я правильно понимаю).

Поскольку для разных команд будут разные адреса электронной почты, например авторизоватьсяМы с @domain.com знаем, что и как делать, основываясь на электронном письме отправителя, мне даже не нужны содержание, тема или какие-либо другие заголовки из электронного письма.


Существует большое беспокойство по поводу безопасности этого приложения, я понимаю проблемы, но, не раскрывая свою концепцию, я не думаю, что это большая проблема для того, что я делаю.Что касается проблемы юзабилити, то ее на самом деле нет.Это будет просто вход в систему, чтобы внести изменения в профиль пользователя, если/когда им это понадобится, и еще одна команда.Это основной адрес электронной почты, его очень легко запомнить, и это начало всей этой концепции.

Это было полезно?

Решение

Я использовал PHP-класс pop3 с большим успехом (есть также Модуль POP3 груши).

Использование класса pop3 выглядит примерно так:

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

Я использую его для мониторинга почтового ящика POP3, который поступает в базу данных.

Он вызывается cronjob, который использует wget для вызова URL-адреса моего PHP-скрипта.

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

Редактировать

Я думал о том, что вам нужно, чтобы пользователи отправляли определенные команды сайта по электронной почте.

Не проще ли иметь один адрес, на который можно отправлять несколько команд, чем несколько адресов?

Я думаю, что проблемы безопасности тоже вполне обоснованы.Если команды не являются неразрушающими или не выполняют ничего конкретного для пользователя, система будет широко открыта для всех, кто знает, как подделать адрес электронной почты (это может быть каждый :)).

Другие советы

Вам понадобится какая-то служба CronJob/Timer, которая регулярно проверяет почтовый ящик, а затем действует на него.В качестве альтернативы вам следует проверить почтовый сервер, может ли он запустить сценарий при поступлении почты (т.посмотрите, можно ли добавить скрипт спам-фильтра и «злоупотребить» этой функцией, чтобы вместо этого вызвать ваш скрипт).

С чистым PHP вам, как правило, не повезло, так как что-то должно запустить скрипт.На странице с большим трафиком вы можете использовать index.php или что-то еще, выполняющее проверку, но если никто не посещает ваш сайт в течение некоторого времени, почта не будет отправлена, и вы должны быть осторожны с «гонкой». условия», когда несколько человек одновременно обращаются к сценарию.

Редактировать: Просто помните об одном недостатке юзабилити:Люди с несколькими компьютерами и без почтового клиента на каждом.Например, я использую 4 компьютера, но только на одном (мой основной) установлен почтовый клиент, а для проверки остальных я использую веб-почту.Теперь вход в систему и отправка почты через веб-почту не являются самым удобным способом использования - чтобы использовать ВАШ сайт, мне сначала нужно войти на ДРУГОЙ сайт, составить письмо через дрянной интерфейс, который есть у большинства инструментов веб-почты, и дождаться ответа.С таким же успехом можно было бы использовать OpenID :-)

Если ваш сервер позволяет это, вы можете использовать .вперед файл или Прокмейл запустить процесс (php или что-то еще), когда письмо поступает на определенный адрес.

Вы не хотите беспокоить пользователей OpenID, но вы хотите, чтобы они имели дело с этой схемой электронной почты.Во-первых, обработка электронной почты может занять много времени.Не существует гарантированного времени доставки электронного письма.Даже не гарантируется, что письмо вообще дойдет.Я знаю, что обычно все происходит быстро, но нередко поездка туда и обратно занимает до 10 минут.Кроме того, если вы не шифруете электронное письмо, ссылка, которую вы отправляете обратно, отправляется в открытом виде.Это означает, что любой может использовать эту ссылку для входа в систему.В зависимости от того, насколько безопасно вы хотите быть, это может быть или не быть проблемой, но об этом определенно стоит подумать.Использование такого нестандартного метода входа в систему потребует гораздо больше работы, чем оно того стоит, и я не вижу никаких преимуществ во всем этом процессе.

Я также думал использовать procmail для запуска какого-нибудь сценария.Существует также formail, который может пригодиться для изменения или извлечения заголовков.Если у вас есть доступ администратора к почтовому серверу, вы также можете использовать /etc/aliases и просто подключить свой скрипт.

Помимо проблем с удобством использования, вам следует серьезно подумать о безопасности — на самом деле отправить электронное письмо с поддельного адреса отправителя довольно просто, поэтому я бы не стал полагаться на него в чем-то критическом.

Я согласен со всеми соображениями безопасности.Ваше предположение о том, что «пользователи и их провайдеры электронной почты заботятся о безопасности своих учетных записей электронной почты», неверно, когда речь идет об адресе электронной почты отправителя.

Но поскольку вы конкретно спросили: «Как мне перейти от отправки электронного письма на учетную запись, которую люди не читают, до запуска какого-то сценария», я рекомендую использовать procmail для доставки входящего электронного письма в сценарий, который вы пишете.

Я бы не называл URL.Я бы попросил сценарий выполнить эту работу, прочитав сообщение, отправленное на стандартный ввод.Таким образом, сценарий будет недоступен никому на веб-сайте.

Чтобы настроить это, адрес электронной почты, который вы предоставляете вашим пользователям, должен быть связан с реальным пользователем в системе.В домашнем каталоге этого пользователя создайте файл с именем «.procmailrc».

В этот файл добавьте эти две строки:

:0 hb:
| /path/to/program

Где/path/to/программа - полный путь к сценарию или программе для обработки входящего сообщения.Затем создайте скрипт с примерно таким кодом:

#!/usr/bin/php
<?php

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

?>

Сообщение электронной почты не останется в почтовом ящике, поэтому, если вы хотите сохранить или зарегистрировать его, попросите это сделать сценарий.

--
Брюс

Я бы серьезно пересмотрел этот подход.Электронная почта не обладает очень высокой надежностью.Существуют всевозможные спам-фильтры, которые могут перехватывать электронные письма со ссылками, тем самым делая «команду» незавершенной, не говоря уже о рисках безопасности.

Подделать адрес отправителя электронного письма очень легко.По сути, вы открываете свою систему кому угодно.

Кроме того, вместо комбинации имени пользователя и пароля вы внезапно требуете, чтобы пользователи запомнили список команд, которые нужно поставить перед адресом электронной почты.Было бы лучше предоставить им имя пользователя/пароль, а затем предоставить доступ к странице помощи.

Другими словами, удобство использования и безопасность этой схемы оцениваются очень низко.

Я не могу найти никаких преимуществ в этом подходе, которые хотя бы приблизились к перевешиванию огромных недостатков.

Одним из решений для предотвращения спама является обеспечение того, чтобы первая, последняя строка или конкретная строка содержали определенную строку, почти как пароль, но лучше полное предложение.

Только у вас есть слово или слова, довольно безопасные, просто не забудьте удалить письма после использования и те, у которых нет секретной строки.

Помимо безопасности и удобства доставки электронной почты может возникнуть еще одна проблема.В зависимости от поставщика электронной почты пользователя доставка электронной почты может задерживаться от нескольких минут до нескольких часов.

Есть очень хорошая поучительная история thedailywtf.com по проектированию программного обеспечения.Поставленный вопрос должен решать правильный дизайн, а не техо-вупла.

Александр, пожалуйста, прочитайте связанную историю и подумайте о перчатках, а не о просмотре веб-страниц по электронной почте.

PHP не является молоток.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top