0

پاسخگوی خودکار نامه ها در php

 
amirpetrucci0261
amirpetrucci0261
کاربر طلایی1
تاریخ عضویت : تیر 1388 
تعداد پست ها : 27726
محل سکونت : http://zoomstar.ir/

پاسخگوی خودکار نامه ها در php

اگرچه برای کاربران این بسیار خوشایند است که با برنامه های تحت وب از طریق ایمیل ارتباط برقرار کنند اما برای کارمندان همواره پاسخگویی به حجم بالای نامه ها در زمان بسیار موتاه و به صورت آنی امکان پذیر نیست. برخی درخواستها پیچیده هستند و پاسخگویی به آنها زمان بر است. برخی دیگر اگرچه ساده هستند اما به دفعات مطرح میشوند. بنابراین این که بتوانیم برنامه ای بنویسیم که به صورت خودکار به نامه های کاربران پاسخ دهد بسیار کارگشا خواهد بود. این برنامه میتواند قابلیتهای زیر را داشته باشد:
• توزیع نامه ها به صورت پویا برای فهرستی از کاربران تعریف شده
• مدیریت خودکار عضو شدن و لغو عضویت کاربران در فهرست ها
• پاسخگویی خودکار به نامه های کاربران برای این که آنها بدانند نامه مورد نظرشان رسیده است
• افزودن نامه دهندگان به یک فهرست
خوشبختانه php قابلیتهای بسیار خوبی در اختیار ما گذاشته است به گونه ای که میتوانیم در آن به راحتی این برنامه را بنویسیم.
ابتدا باید راهی داشته باشیم که توسط آن هر زمان که ایمیلی دریافت میکنیم یک اسکریپت خودبخود اجرا شود.اگر از Qmail در لینوکس استفاده مینمایید، میباید فایلی موسوم به .qmail بنویسیم. نام فایل بایستی با .qmail آغاز گردد و سپس یک علامت – داشته باشد. در این برنامه برای آنکه در حال طراحی یک پاسخگوی خودکار هستیم، از نام .qmail-support برای فایل مورد نظرمان استفاده مینماییم.

| /path/to/php /path/to/autoresponder-script.php

سپس اسکریپت مورد نظر را ایجاد مینماییم. در ابتدای اسکریپت باید متغیرهایمان را مقداردهی اولیه بنماییم:

// Initialize variables
$from = "";
$to = "";
$cc = "";
$bcc = "";
$subject = "";
$allheaders = "";
$otherheaders = "";
$message = "";
$splittingheaders = true;

سپس کدی مینویسیم که نامه مورد نظر را دریافت کند :

// Get the email from stdin
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);

سپس نامه را درون یک آرایه به صورت خط به خط ذخیره میکنیم:

// Parse the email line by line into an array
$lines = explode("\n", $email);

حال باید کدی بنویسیم که محتوای متغیرهایی را تعیین کند که در ابتدای صفحه مقداردهی اولیه شان کردیم .

for ($i=0; $i<count($lines); $i++) {

//processing the mail header

}

کاری که اکنون باید انجام شود ارسال یک پاسخ خودکار به کاربر مبنی بر دریافت نامه وی است که این کار را با استفاده از متدmail انجام میدهیم.

// Send an autoresponse back to the user
mail("$from", "Responding subject", "", "From: Responder Name ");

از آنجایی که ممکن است ایمیل دریافت شده خود توسط یک پاسخگوی خودکار دیگر ارسال شده باشد، کدی که نوشته ایم باعث ایجاد یک حلقه نامتناهی میگردد که در آن پاسخگوها مرتبا به یکدیگر نامه ارسال میکنند!!! همچنین ممکن است نامه ارسالی از دامنه خودمان باشد که باز هم منجر به یک حلقه میشود! از آنجایی که قطعا نمیخواهیم چنین مشکلی پیش بیاید ابتدا دامه ارسالی را قبل از ارسال نامه بررسی میکنیم:

// If the user isn't from our domain
if(!strpos($from, '@yourdomain.com')) {
// Then send an autoresponse back to the user
mail(....);
}

سپس لیستی از آخرین 10 نامه ارسال شده به اسکریپت پاسخگوی خودکار را نگهداری میکنیم. اگر نامه فعلی به آدرسی قرار است فرستاده شود که در 10 نامه ارسال شده گذشته ، 8 بار به آدرس آن نامه پاسخ داده ایم ، ارسال نامه را لغو میکنیم:

Secondly, I keep a list of the latest 10 emails sent to the autoresponder script. If the current from address is 8 of the last 10 entries, then I suppress further responses.

// Read in the list of recent emails from the filesystem
$recentMatches = 0;
$fd = fopen("/path/to/recentList.txt", "r");
while (!feof($fd)) {
$recentList .= fread($fd, 1024);
}
fclose($fd);
$lines = explode("\n", $recentList);
for ($i=0; $i< count($lines); $i++) {
if($i > 0 || count($lines) < 10)
fwrite($fd, $lines[$i] . "\n");
}
fwrite($fd, $fromEmail . "^" . $date);
fclose($fd);
// If the user isn't from our domain and hasn't sent too many recent emails
if($recentMatches < 8 && !strpos($from, '@yourdomain.com')) {
// Then send an autoresponse back to the user
mail(....);
}

همچنین میتوانید کد زیر را برای فوروارد کردن نامه (به منظور ایجاد نسخه پشتیبان یا ...) استفاده نمایید:

// If the user isn't from our domain and hasn't sent too many recent emails
if($recentMatches < 8 && !strpos($from, '@yourdomain.com')) {
// Forward the email
mail("First Last ", "$subject", "$message", "From: $from\n");
mail("First Last ", "$subject", "$message", "From: $from\n");
}

برای دریافت کد کامل برنامه میتوانید از

اینجا

استفاده کنید

پنج شنبه 11 آذر 1389  2:06 AM
تشکرات از این پست
دسترسی سریع به انجمن ها