2008-08-28 5 views
1

Arbeiten an einem kleinen Nebenprojekt Web-App ...einen Weg der Suche nach einem PHP-Skript würde ich eine E-Mail

ein bestimmtes Konto erhält jedes Mal treten mag es so, dass eingerichtet haben, wenn Benutzer senden E-Mail an ein bestimmtes Konto, ich kann ein PHP-Skript starten, das die E-Mail liest, einige wichtige Informationen herauszieht und in eine Datenbank schreibt.

Was ist der beste Weg, dies zu tun? Ein Cron-Job, der nach neuen E-Mails sucht?

Die App läuft auf einem "Dedicated-Virtual" Server bei MediaTemple, also denke ich, dass ich ein vernünftiges Maß an Kontrolle habe, was mir eine Reihe von Optionen geben sollte.

Ich bin sehr langsam lernen die Seile (PHP, MySQL, Konfiguration/Verwaltung des Servers), so dass Ihr Rat und Einblick sehr geschätzt wird.

Prost, Matt Stuehler

Antwort

0

Die Cronjob ist die übliche Lösung für eine solche Aufgabe. Checking for new Mails with PHP ist kein Problem. Wenn du einen qmail-Server betreibst (vielleicht können andere Server das auch?) Kannst du auf jeder "empfangenen Mail" fire a script, die dein PHP-Skript auslöst.

1

Wenn Sie die Kontrolle über einen Mail-Transfer-Agenten haben, der konfigurierbar ist, um .forwards oder ähnliche konfigurierbare Zustellungsoptionen (qmail, postfix und sendmail) zu ermöglichen, würde ich das Skript einfach in .forward,. procmailrc oder ein anderer ähnlicher programmierbarer Liefermechanismus. Wenn Sie dies tun, sollten Sie eine ernsthafte Eingabeüberprüfung für die E-Mail durchführen (stellen Sie sicher, dass der Absender der erwartete Absender ist, die empfangenen Zeilen übereinstimmen, die Daten sind gesund), wenn Sie nicht möchten, dass andere auf die Adresse stolpern mit deinem System zu meckern.

Sie wollen auch verwenden, welche Eingabe Desinfizierer PHP verwendet, um Dinge wie SQL-Injektionen von schädlichen Daten zu vermeiden! wir können alle reflektieren die Lektion der kleinen Haarn Tabellen:

xkcd.com/327/

0

können Sie eine .forward-Datei verwenden.

Platzieren Sie den vollständigen Pfad des PHP-Skript in die Datei nach einem Pipe-Zeichen:

|/full/path/to/script.php 
4

Procmail ist, wie ich es tun. Hier ist ein Beispiel, in dem ich den Text in der E-Mail tatsächlich verarbeite, um ihn in einer MySQL-Datenbank zu archivieren.

:0: 
* ^(From).*[email protected] 
{ 
    :0 c 
    | php /var/www/app/process_email.php 

} 
1

Ich arbeitete vor kurzem an einem Projekt, das diesen Bedarf hatte. Ich hatte großen Erfolg mit einer .forward-Datei im Home-Verzeichnis der Mail-Accounts. Angenommen, Sie versuchen, dies für die Adresse [email protected] zu tun, und der Server, mit dem Sie arbeiten, ist der Mail-Server für bar.com. Sie müssten zuerst eine .forward-Datei für dieses Konto erstellen. Auf dem Server arbeitete ich an, dies wäre:

/home/email/[email protected]/.forward

Der Inhalt dieser Datei waren wie folgt:

„|/path/to/script.php "

Auch der Eigentümer der .forward-Datei war [email protected] und es wurde chmod'd to 600 (nur lesen/schreiben an den Besitzer).)

Als nächstes müssen Sie das Skript, das Sie leiten die Mail zu (/path/to/script.php oben.) Zunächst muss dieses Skript ausführbar sein (+ x). Der Rest liest einfach STDIN und handhabt es, wie Sie es wünschen. Hier ist ein Beispielskript, das die gesamte Nachricht liest und in einer Variable $ email speichert.

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

Hoffentlich war das eine Hilfe für Sie.