Как управлять веб-приложением по электронной почте? Или как запустить php скрипт, отправив электронное письмо? - PullRequest
3 голосов
/ 06 сентября 2008

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

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

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


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

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


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

Ответы [ 10 ]

7 голосов
/ 06 сентября 2008

Я использовал pop3 php class с большим успехом (есть также модуль Pear 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

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

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

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

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

3 голосов
/ 08 сентября 2008

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

3 голосов
/ 06 сентября 2008

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

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

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

1 голос
/ 11 сентября 2008

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

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

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

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

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

:0 hb:
| /path/to/program

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

#!/usr/bin/php
<?php

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

?>

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

-
Брюс

1 голос
/ 08 сентября 2008

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

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

1 голос
/ 08 сентября 2008

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

0 голосов
/ 17 сентября 2008

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

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

PHP - это не молот .

0 голосов
/ 17 сентября 2008

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

0 голосов
/ 16 сентября 2008

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

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

0 голосов
/ 08 сентября 2008

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

Очень легко подделать адрес отправителя по электронной почте. Вы в основном открываете свою систему для всех.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...