Нужен способ запуска скрипта php каждый раз, когда конкретный аккаунт получает письмо - PullRequest
1 голос
/ 29 августа 2008

Работа над небольшим сайтом веб-приложения проекта ...

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

Какой лучший способ сделать это? Задание cron, которое проверяет новую электронную почту?

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

Я очень медленно изучаю веревки (PHP, MySQL, настройка / управление сервером), поэтому ваши советы и понимание очень ценятся.

Cheers, Мэтт Стюлер

Ответы [ 5 ]

4 голосов
/ 29 августа 2008

Procmail - это то, как я это делаю. Вот пример, где я на самом деле обрабатываю текст внутри письма, чтобы архивировать его обратно в базу данных MySQL.

:0:  
* ^(From).*test@example.com
{   
  :0 c
  | php /var/www/app/process_email.php

}
1 голос
/ 30 апреля 2009

Я недавно работал над проектом, который имел эту потребность. Я имел большой успех, используя файл .forward в домашнем каталоге почтовых аккаунтов. Например, допустим, вы пытаетесь сделать это для адреса foo@bar.com, а сервер, с которым вы работаете, является почтовым сервером для bar.com. Сначала вам нужно будет создать файл .forward для этой учетной записи. На сервере, на котором я работал, это будет:

/home/email/foo@bar.com/.forward

Содержимое этого файла было следующим:

"| /path/to/script.php"

Кроме того, владельцем файла .forward был foo@bar.com, а chmod'd до 600 (чтение / запись только для владельца.)

Далее вам нужно настроить скрипт, на который вы отправляете почту (/path/to/script.php выше.) Во-первых, этот скрипт должен быть исполняемым (+ x). Остальное просто читает STDIN и обрабатывает его так, как вы пожелаете. Вот пример сценария, который читает все сообщение и сохраняет его в переменной $ email.

#!/usr/local/bin/php
<?php
$fd = fopen("php://stdin","r");
$email = '';
while($feof($fd)){
    $email .= fread($fd, 1024);
}
fclose($fd);
?>

Надеюсь, это помогло вам.

1 голос
/ 29 августа 2008

если у вас есть контроль над агентом пересылки почты, который настраивается так, чтобы разрешать .forwards или аналогичные настраиваемые параметры доставки (qmail, postfix и sendmail все есть), я просто установил бы скрипт в вашем .forward, .procmailrc или другой аналогичный программируемый механизм доставки. при этом вы должны провести серьезную проверку ввода по почте (убедитесь, что отправитель именно тот, кого вы ожидаете, полученные строки совпадают, данные вменяемые), если вы не хотите, чтобы другие, кто наткнулся на адрес, могли гадить с вашей системой.

вы также захотите использовать любой вводящий sanitizer php, чтобы избежать таких вещей, как инъекции sql из вредоносных данных! мы все можем подумать над уроком маленьких заколочных столов:

xkcd.com / 327 /

0 голосов
/ 29 августа 2008

Вы можете использовать файл .forward .

Просто поместите полный путь вашего PHP-скрипта в файл после знака канала:

|/full/path/to/script.php
0 голосов
/ 29 августа 2008

Cronjob - общее решение такой задачи. Проверка новых писем с PHP не проблема. Если вы запускаете qmail-сервер (может быть, другие серверы тоже могут это делать?), Вы можете запускать скрипт для каждой «полученной почты», что вызывает ваш php-скрипт.

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