PDA

View Full Version : اجرای کد PHP بعد از دریافت ایمیل



nemooz
چهارشنبه 11 مرداد 1391, 18:59 عصر
سلام ،
اساتید گرامی ، با PHP ، چطور میشه به محض دریافت ایمیل ، یک کد رو اجرا کرد ؟
یعنی اگر سرور ما به ادرس welcomeuser@user.com یک ادرس دریافت کرد ، فایل user.com/eml.php اجرا بشه ؟
حالا این آدرس ایمیل میتونه متغیر باشه ، هر ایمیلی ...
البته بدون cronjobs ....
حتی در سرور مجازی ، فرقی نمی کنه ، میشه سرور مجازی هم تهیه کرد .
لینوکس / CentOS
با تشکر

Unique
پنج شنبه 12 مرداد 1391, 02:31 صبح
راستش معمولا با cron job این کار را انجام میدهند اما اگه واقعا بخوای همون موقع جواب بگیری ! فقط روی سرورس دهنده اختصاصی دو تا راه حل داری :

1 - احتمال خیلی خیلی زیاد mta ها دستوراتی دارند یا config هایی که میشه با یک اسکریپت در صورت دریافت ایمیل یک action اتفاق بیفته که این اکشن میتونه صدا زدن یک صفحه php باشه ! توصیه میکنم یک نگاهی به Doument های postfix بندازی یا در انجمن مربوط به لینوکس از دوستانی که زیاد mail server راه اندازی کردن سوال کنین ! من 99% احتمال میدم این موضوع وجود داشته باشه ! توی انجمن های مربوط به postfix هم بپرسین جواب میدن.

2 - میشه یک نرم افزار با python یا c نوشت که port 25 را sniff کنه و در صورت دریافت ایمیل برای آدرس مربوطه فایل php را صدا بزنه !

nemooz
پنج شنبه 12 مرداد 1391, 22:58 عصر
سلام
یک ایمیل نیست ،
معلوم نیست به چه ادرسی ایمیل ارسال بشه ....

Unique
پنج شنبه 12 مرداد 1391, 23:11 عصر
شما دو طرف مسئلتون x و نا معلوم شد ! لطفا دقیق توضیح بدین با مثال که دنبال چی هستین !

nemooz
جمعه 13 مرداد 1391, 14:15 عصر
سلام !
بله صحیح میفرمایید ،
ببینید ، ما یک دامنه داریم به عنوان مثال : abc.com
حالا ، باید یک کد نوشته بشه که این کارهارو بکنه :

ایمیل درست کنه به صورت رندوم : jkghjhg@subdomain.abs.com
دقیقاً مثل فیس بوک ف این ادرس ایمیل ها برای هر کاربر یکتاست !
حالا کاربر به این آدرس ، یک ایمیل ارسال میکنه ، بعد از ارسال ،
باید کد PHP مربوط به برخی پردازش ها اجرا بشه ،
یعنی مشخص بشه که این ایمیل از طرف چه ادرسی اومده که کارهای مربوط به اون آدرس انجام بشه .

اگر باز هم بد توضیح دادم ببخشید ،
بفرمایید که کاملتر توضیح بدم.

دقیقاً مثل ارسال عکس به فیس بوک اگر دقت کرده باشید

MMSHFE
جمعه 13 مرداد 1391, 14:45 عصر
دوست عزیز، ایمیلهایی که ازطرف Facebook میاد، اگه خوب دقت کرده باشین، حاوی لوگوی Facebook هست ولی این لوگو در اصل توسط یک اسکریپت PHP داره تولید میشه (با کمک GD) یعنی خاصیت src تگ img داره به آدرس اون اسکریپت اشاره میکنه. اما این کار چه مزیتی داره؟ خوب خیلی امتیازها میشه براش درنظر گرفت اما حداقلش اینه که توی اون اسکریپت میتونید ['SERVER['HTTP_REFERER_$ رو چک کنید و ببینید کدوم صفحه وب این اسکریپت رو درخواست کرده و توسط اون، بفهمین ایمیل مربوطه چی بوده. حتی میتونید برای هر ایمیل، یک ID یکتا که توی دیتابیس دارین رو هم برای این اسکریپت بفرستین. مثلاً تگ img رو اینطوری بسازین:

<img src="yoursite.com/logo.php?id=12345"/>
و توی صفحه logo.php مقدار ['GET['id_$ رو بررسی کنید.
موفق باشید.

Unique
جمعه 13 مرداد 1391, 18:48 عصر
من فکر نکنم منظورشون این باشه ! بازم بد توضیح دادند !

nemooz
شنبه 14 مرداد 1391, 16:01 عصر
من فکر نکنم منظورشون این باشه ! بازم بد توضیح دادند !


سلام
دقیقاً ،
منظور من اصلاً این نبود ،

موضوعی که عرض کردم یک کم پیچیده تر از اینهاست ،

چیزی که میخوام به زبون ساده :

کاربر عضو سایت میشه > به صورت اوتوماتیک یک ایمیل براش تولید بشه { آدرس به صورت رندم انتخاب بشه akjsdhkjhkhj@site.com }

این ایمیل یکتا باشه ، برای هر کاربر .
کاربر به ادرس امیل مخصوص ِ خودش ، ایمیلی ارسال کرد ، باید یک فایل مثلاً با نام proccess.php اجرا بشه ، که کارهای خاصی رو بکنه ،

نکته اینجاست که اول اینکه ، چطوری ایمیل ساخته بشه به صورت اوتوماتیک ؟ { با فرض پانل DA مشکلی نیست در این مرحله }
سوال اینجاست : وقتی سرور ِ ما یک ایمیل دریافت میکنه ، چطور باید به محض دریافت ایمیل ، process.php ران بشه ؟ و تشخیص بده که ایمیل برای چه آدرسی ارسال شده ؟
مهمترین موضوع این هست که چطوری باید تنظیم بشه که به محض دریافت ایمیل ، این فایل باید اجرا بشه ؟

با تشکر

nemooz
شنبه 14 مرداد 1391, 16:03 عصر
منظورم دقیقاً کاری هست که فیس بوک میکنه !
به هر کاربر که عضو میشه ، یک ایمیل اختصاص میده که با استفاده از اون میتونه عکس اپلود کنه ...
البته سایت های زیادی دیدم در این رابطه که این کار رو میکنند ،
مساله اینجاست ، از cron jobs نمیخوام استفاده بشه .
کانفیگ ِ خاصی در سرور باید باشه ، اما چی ؟
ممنون میشم راهنمایی کنید .
سپاس

Unique
شنبه 14 مرداد 1391, 20:11 عصر
خوب حالا شد یه چیزی !
من بعید میدونم که سایتی مثل facebook بیاد و برای کاربرا واقعا email تعریف کنه ! احتمالا یک برنامه نوشتن که از طریق port 25 داره نقش mail server را بازی میکنه و هر ایمیلی که دریافت کرد را بر اساس گیرنده و حالا موضوع و متن ایمیل پردازش و بعدش dropیا جایی برای log گرفتن ذخیره میکنه ! شما در هر حالت باید همون port 25 را شنود کنین اما نه با php ! سوالتون کلا به خود php مربوط نمیشه و بیشتر server admin ها باید بهتون راه حلی ارائه کنند ! اگه جای شما بودم دنبال یک MTA (توی لینوکس postfix و توی ویندوز Outlook) میگشتم که بشه با یک افزونه در زمان دریافت ایمیل مشخصات ایمیل را برای فایل php ارسال کنه ! البته میشه برنامه هایی هم نوشت که مثل یک MTA روی پورت 25 مثل یک MAil Server عمل کنند !

nemooz
یک شنبه 15 مرداد 1391, 02:43 صبح
سلام !
ممنونم واقعاً بابت توجهتون و راهنمایی هاتون ،
فیس بوک الان که کلاً ایمیل اختصاصی میده به کاربر ، اما این موضوع رو احتماً صحیح میفرمایید .
در رابطه با موضوع سرور که فرمودید ، برای پروژه قراره باید یک سرور اختصاصی تهیه بشه ،
ممنون میشم اگر زحمتی نیست یک کم بیشتر توضیح بدید ؟postfix
و همینطور ، در رابطه با اینکه فرمودید میشه با PHP هم برنامه نویسی کرد ممنون میشم کمی توضیح بدید در صورت امکان...
یا اگر وقتتون رو میگیره ، راهنمایی بفرمایید که من چه موضوعی رو گوگل کنم { انگلیسی / فارسی } تا ببینیم به کجا میرسم...

ممنون باز هم.

Unique
یک شنبه 15 مرداد 1391, 15:58 عصر
postfix یک MTA هست ! توی گوگل بزنید MTA کلی مطلب براتون میاره ! خود postfix هم سایت اصلی و کلی froum داره که میتونید توش سوال بپرسین !
همونطور که گفتم زبان اسکریپتی راه حل مناسبی برای این کار نیست ! با C یا pascal بهتر میشه socket programming انجام داد !

nemooz
یک شنبه 15 مرداد 1391, 23:23 عصر
سلام
خب من یک راه حل پیدا کردم ،
http://harrybailey.com/2009/02/send-or-pipe-an-email-to-a-php-script/

اما مشکل اینجاست که هیچ توضیح کاملی راحع به STDIN پیدا نمی کنم !
جایی سراغ دارید شما ؟

با احترام

Unique
دوشنبه 16 مرداد 1391, 15:41 عصر
خیلی با حال بود ! من این را نمیدونستم !
php://stdin مطلب خاصی نیست ! همین را استفاده کنین ، احتمالا کار میده ! اما برای سرور اختصاصی بدون استفاده از cpanel و با همون postfix ! از این لینک (http://blog.thecodingmachine.com/content/triggering-php-script-when-your-postfix-server-receives-mail) استفاده کنین !

stdin یا همون Standard Input را نمیتونم فارسیشو خوب براتون بگم ! از روی wikipedia :

Standard input is data (often text) going into a program. The program requests data transfers by use of the read operation. Not all programs require input. For example, the dir or ls program (which displays file names contained in a directory) performs its operation without any stream data input.