Bir php komut dosyası belirli bir hesap bir e-posta aldığında her zaman tekme için bir yol gerekir

5 Cevap php

Küçük bir yan proje web uygulaması üzerinde çalışıyor ...

Kullanıcıların belirli bir hesabın e-posta gönderin, ben, e-posta okuma bazı önemli bilgileri ortaya çıkarır ve bir veritabanına yazar bir php script kick off, o yüzden kurdunuz istiyorum.

Bunu yapmanın en iyi yolu nedir? Yeni e-posta için denetler bir cron işi?

App MediaTemple bir "Dedicated-Virtual Server" üzerinde çalışıyor, bu yüzden bana bir dizi seçenek vermelidir makul bir kontrol seviyesi var sanırım.

Ben çok yavaş bu yüzden tavsiye ve fikir çok takdir edilir (sunucu yönetimi / yapılandırma, PHP, MySQL) ipleri öğreniyorum.

Cheers, Matt Stuehler

5 Cevap

Procmail bunu nasıl olduğunu. Burada aslında bir MySQL veritabanı geri arşivlemek için e-posta içinde metni işlemek bir örnek.

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

}

Eğer. ileri veya benzer yapılandırılabilir teslimat seçenekleri izin yapılandırılabilir bir posta aktarım aracısı kontrolü var (qmail, postfix, ve hepsi sendmaili), ben sadece. ileri. procmailrc'miz veya diğer script kurmak istiyorum Benzer programlanabilir dağıtım mekanizması. Bunu yaparken, size adres üzerine yanılmak başkalarının mümkün istemiyorsanız (gönderen beklediğiniz kim olduğundan emin, alınan çizgiler veri aklı başında, maç yapmak) postada bazı ciddi giriş doğrulaması yapmalıdır sistem ile muck.

Ayrıca kötü niyetli veri SQL enjeksiyonu gibi şeyler önlemek için kullandığı php dezenfektanı ne girdi kullanmak isteyeceksiniz! Hepimizin küçük Bobby tablolar ders üzerine yansıtabilir:

xkcd.com/327 /

Geçenlerde bu ihtiyacı vardı bir proje üzerinde çalıştı. Eve dizini hesapları postayla bir. Ileri dosyası kullanarak büyük bir başarı vardı. Örneğin, adres foo@bar.com için bunu yapmak için çalışıyoruz diyelim, ve birlikte çalıştığınız sunucu bar.com için bir posta sunucusu. Önce bu hesap için bir. Ileri dosyası oluşturmak gerekir. Ben çalıştı sunucuda, bu olurdu:

/ Home / e-posta / foo @ bar.com / .forward

Aşağıdaki gibi o dosyanın içeriği şunlardı:

"| / Yol / / script.php için"

Ayrıca,. Ileri dosyanın sahibi foo@bar.com oldu ve 600 chmod'd edildi (tek sahibinin okuma / yazma.)

Next, you need to setup the script you're piping the mail to (/path/to/script.php above.) Firstly, that script needs to be executable (+x). The rest simply reads STDIN and handles it however you wish. Here's a sample script that reads the entire message and stores it in a variable $email.

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

Umarım bu sizin için bazı yardımcı oldu.

Cronjob Böyle bir görev için ortak bir çözümdür. Checking for new Mails with PHP hiçbir Sorun. Eğer bir qmail-sunucu çalıştırırsanız (belki diğer sunucuları da yapabilirsiniz?) Size fire a script her sizin php komut tetikler, "posta aldım" olabilir.

Bir .forward dosyasını kullanabilirsiniz.

Sadece bir boru işaretinden sonra, dosyanın içine PHP komut dosyası tam yolunu yerleştirin:

|/full/path/to/script.php