كيفية التحكم في تطبيق ويب من خلال البريد الإلكتروني؟أو كيفية تشغيل برنامج php عن طريق إرسال بريد إلكتروني؟

StackOverflow https://stackoverflow.com/questions/46777

  •  09-06-2019
  •  | 
  •  

سؤال

أريد تشغيل تطبيق ويب على php وmysql، باستخدام إطار عمل CakePHP.وللحفاظ على حد استخدام الموقع عند مستوى منخفض جدًا، أريد عدم استخدام تسجيل الدخول القياسي باستخدام اسم المستخدم/كلمة المرور.(ولا أريد أن أزعج المستخدمين بشيء مثل OpenID أيضًا.يذهب إلى نوع المستخدم.)

لذلك أعتقد أن المستخدمين سيتمكنون من تسجيل الدخول عن طريق إرسال بريد إلكتروني إلى login@domain.com دون الحاجة إلى موضوع أو محتوى.وسيتلقون ردًا على ذلك رسالة بريد إلكتروني تحتوي على رابط لتسجيل دخولهم (سيحتوي على علامة تجزئة).كما سأسمح للمستخدمين بالقيام ببعض الإجراءات دون زيارة الموقع على الإطلاق، فقط أرسل بريدًا إلكترونيًا مع Command@domain.com وسيتم تنفيذ الأمر.سأفترض أن المستخدمين ومقدمي خدمة البريد الإلكتروني الخاصين بهم يهتمون بأمان حساب البريد الإلكتروني الخاص بهم، وبالتالي ليست هناك حاجة لذلك على موقعي.

الآن، كيف يمكنني الانتقال من إرسال بريد إلكتروني إلى حساب لا يقرأه البشر إلى إطلاق بعض البرامج النصية (في الأساس، يستدعي "عميل متصفح وهمي" عنوان url (وسوف يتولى cakephp الباقي)؟


لم أستخدم وظيفة cron من قبل، ولكن أعتقد أنني أفهم الغرض منها أو كيفية عملها بشكل عام.لا أستطيع أن أطلب من الأشخاص الذين يزورون الموقع بشكل عشوائي استدعاء البرنامج النصي، لأن هذا الحل لن يعمل لعدة أسباب.أعتقد أنني أود أن أسمع المزيد عن إمكانية تشغيل البرنامج النصي كرد على رسالة بريد إلكتروني واردة، إذا كان لدى أي شخص أي مدخلات على الإطلاق في هذا الشأن.إذا تم تشغيلها كمهمة cron، فإنها ستتحقق فقط كل X دقيقة وسيتأخر المستخدمون في استجابتهم (إذا فهمت ذلك بشكل صحيح).

نظرًا لأنه سيكون هناك عناوين بريد إلكتروني مختلفة لأوامر مختلفة، مثل تسجيل الدخول@domain.com وأنا أعرف ما يجب فعله وكيفية القيام بذلك بناءً على البريد الإلكتروني للمرسل، ولا أحتاج حتى إلى المحتوى أو الموضوع أو أي رؤوس أخرى من البريد الإلكتروني.


هناك الكثير من القلق بشأن أمان هذا التطبيق، وأنا أفهم المشكلات، ولكن دون التخلي عن مفهومي، لا أعتقد أنها مشكلة كبيرة بالنسبة لما أفعله.أيضًا فيما يتعلق بمسألة سهولة الاستخدام، لا يوجد أي شيء حقًا.سيتم تسجيل الدخول فقط لتوفير التغييرات في الملف الشخصي للمستخدمين إذا/عندما يحتاجون إلى ذلك وأمر آخر.وهذا هو البريد الإلكتروني الرئيسي ومن السهل جدًا تذكره، وهو بداية هذا المفهوم بأكمله.

هل كانت مفيدة؟

المحلول

لقد استخدمت فئة PHP Pop3 بنجاح كبير (هناك أيضًا وحدة الكمثرى POP3).

يبدو استخدام فئة pop3 كما يلي:

require ('pop3.php');

$pop3 = new pop3_class();
$pop3->hostname = MAILHOST;
$pop3->Open();
$pop3->Login('myemailaddress@mydomain.com', 'mypassword');

foreach($pop3->ListMessages("","") as $msgidx => $msgsize)
{
    $headers = "";
    $body = "";

    $pop3->RetrieveMessage($msgidx, $headers, $body, -1);
}

أستخدمه لمراقبة صندوق بريد POP3 الذي يغذي قاعدة البيانات.

يتم استدعاؤه بواسطة cronjob الذي يستخدم wget لاستدعاء عنوان url إلى البرنامج النصي php الخاص بي.

*/5 * * * * "wget -q --http-user=me --http-passwd=pass 'http://mydomain.com/mail.php'" >> /dev/null 2>&1

يحرر

لقد كنت أفكر في حاجتك إلى جعل المستخدمين يرسلون أوامر موقع معينة عبر البريد الإلكتروني.

ألن يكون من الأسهل أن يكون لديك عنوان واحد يمكن إرسال أوامر متعددة إليه بدلاً من الحصول على عناوين متعددة؟

أعتقد أن المخاوف الأمنية صحيحة أيضًا.ما لم تكن الأوامر غير مدمرة أو لا تفعل أي شيء خاص بالمستخدم، فسيكون النظام مفتوحًا على مصراعيه لأي شخص يعرف كيفية انتحال عنوان بريد إلكتروني (وهو ما ينطبق على الجميع :)).

نصائح أخرى

ستحتاج إلى نوع من خدمة CronJob/Timer التي تتحقق من صندوق البريد بانتظام ثم تعمل بناءً عليه.وبدلاً من ذلك، يجب عليك التحقق من خادم البريد إذا كان يمكنه تشغيل برنامج نصي عند وصول البريد (أي:معرفة ما إذا كان من الممكن وضع برنامج نصي لتصفية البريد العشوائي و"إساءة استخدام" هذه الوظيفة لاستدعاء البرنامج النصي الخاص بك بدلاً من ذلك).

مع PHP الخالص، لن يحالفك الحظ في الغالب لأن هناك شيئًا ما يحتاج إلى تشغيل البرنامج النصي.في صفحة ذات عدد كبير من الزيارات، يمكن أن يكون لديك ملف Index.php الخاص بك أو أي شيء آخر للقيام بالفحص، ولكن عندما لا يقوم أحد بزيارة موقعك لبعض الوقت، فلن يتم إرسال البريد، ويجب عليك توخي الحذر من "السباق" الشروط" عندما يصل عدة أشخاص إلى البرنامج النصي في نفس الوقت.

يحرر: فقط ضع في اعتبارك عيبًا واحدًا في قابلية الاستخدام:الأشخاص الذين لديهم أجهزة كمبيوتر متعددة وليس لديهم عميل بريد إلكتروني على كل جهاز.على سبيل المثال، أستخدم 4 أجهزة كمبيوتر، لكن جهازًا واحدًا فقط (جهازي الرئيسي) مثبت عليه عميل البريد، وأستخدم بريد الويب للتحقق من الأجهزة الأخرى.الآن، لا يعد تسجيل الدخول وإرسال بريد عبر Webmail هو أفضل قابلية للاستخدام - لكي أستخدم موقعك، يجب علي أولاً تسجيل الدخول إلى موقع آخر، وإنشاء بريد من خلال الواجهة الرديئة التي تمتلكها معظم أدوات بريد الويب وانتظر الإجابة.يمكن أيضًا استخدام OpenID هناك :-)

إذا كان الخادم الخاص بك يسمح بذلك، يمكنك استخدام ملف .إلى الأمام ملف أو بروميل لبدء عملية (php أو أي شيء) عندما يصل البريد إلى عنوان معين.

لا ترغب في إزعاج المستخدمين باستخدام OpenID، ولكنك تريدهم أن يتعاملوا مع نظام البريد الإلكتروني هذا.أولاً، يمكن أن يستغرق إرسال البريد الإلكتروني وقتًا طويلاً.ليس هناك أي وقت مضمون لتسليم البريد الإلكتروني خلاله.ليس من المؤكد حتى أن البريد الإلكتروني سيصل إلى هناك على الإطلاق.أعرف أن الأمور عادة ما تكون سريعة، ولكن ليس من غير المألوف أن تستغرق الرحلة ما يصل إلى 10 دقائق حتى تكتمل الرحلة ذهابًا وإيابًا.بالإضافة إلى ذلك، ما لم تكن تقوم بتشفير البريد الإلكتروني، فسيتم إرسال الرابط الذي ترسله مرة أخرى بشكل علني.وهذا يعني أنه يمكن لأي شخص استخدام هذا الرابط لتسجيل الدخول.اعتمادًا على مدى الأمان الذي تريد أن تكون عليه، قد يكون هذا مشكلة أو لا يكون، لكنه بالتأكيد شيء يجب التفكير فيه.إن استخدام طريقة تسجيل دخول غير قياسية كهذه سيتطلب عملاً أكثر بكثير مما يستحق، ولا أستطيع حقًا رؤية أي مزايا للعملية برمتها.

كنت أفكر أيضًا في استخدام procmail لبدء بعض البرامج النصية.هناك أيضًا فورميل، والذي قد يكون مفيدًا لتغيير الرؤوس أو استخراجها.إذا كان لديك حق الوصول الإداري إلى خادم البريد، فيمكنك أيضًا استخدام /etc/aliases والتوجيه فقط إلى البرنامج النصي الخاص بك.

إلى جانب مشكلات قابلية الاستخدام، يجب عليك التفكير حقًا في الأمان - من السهل جدًا إرسال بريد إلكتروني باستخدام عنوان مرسل مزيف، لذلك لن أعتمد عليه في أي شيء مهم.

وأنا أتفق مع كافة المخاوف الأمنية.إن افتراضك بأن "المستخدمين ومقدمي خدمات البريد الإلكتروني يعتنون بأمان حساب البريد الإلكتروني الخاص بهم" ليس صحيحًا عندما يتعلق الأمر بعنوان البريد الإلكتروني للمرسل.

ولكن بما أنك سألت على وجه التحديد "كيف يمكنني الانتقال من إرسال بريد إلكتروني إلى حساب لا يقرأه البشر إلى إطلاق بعض البرامج النصية"، فإنني أوصي باستخدام procmail لتسليم البريد الإلكتروني الوارد إلى برنامج نصي تكتبه.

لن أتصل بعنوان URL.سأطلب من البرنامج النصي تنفيذ العمل من خلال قراءة الرسالة المرسلة على stdin.بهذه الطريقة، لا يمكن لأي شخص الوصول إلى البرنامج النصي على موقع الويب.

لإعداد هذا ، يجب أن يرتبط عنوان البريد الإلكتروني الذي تقدمه للمستخدمين بمستخدم حقيقي على النظام.في الدليل الرئيسي لذلك المستخدم، قم بإنشاء ملف يسمى ".procmailrc"

في هذا الملف، أضف هذين السطرين:

:0 hb:
| /path/to/program

WHERE/to/to/program هو المسار الكامل للنص أو البرنامج للتعامل مع الرسالة الواردة.ثم قم بإنشاء البرنامج النصي برمز مثل هذا:

#!/usr/bin/php
<?php

$fp=fopen('php://stdin','r');
while($line = fgets($fp)) {
    [do something with each $line of input here]
}

?>

لن تبقى رسالة البريد الإلكتروني في صندوق البريد، لذا إذا كنت تريد حفظها أو تسجيلها، فاطلب من البرنامج النصي القيام بذلك.

--
بروس

سأعيد النظر بجدية في هذا النهج.لا يتمتع البريد الإلكتروني بموثوقية عالية جدًا.هناك جميع أنواع مرشحات البريد العشوائي التي قد تعترض رسائل البريد الإلكتروني التي تحتوي على روابط مما يجعل "الأمر" غير مكتمل، ناهيك عن المخاطر الأمنية.

من السهل جدًا انتحال عنوان المرسل في البريد الإلكتروني.أنت في الأساس تفتح نظامك لأي شخص.

وأيضًا بدلاً من الجمع بين اسم المستخدم وكلمة المرور، فإنك تطلب فجأة من المستخدمين أن يتذكروا قائمة الأوامر التي يجب وضعها أمام عنوان البريد الإلكتروني.سيكون من الأفضل تزويدهم باسم مستخدم/كلمة مرور ومن ثم منحهم حق الوصول إلى صفحة المساعدة.

وبعبارة أخرى، فإن سهولة الاستخدام والأمن لهذا المخطط تكون درجاتها منخفضة للغاية.

لا يمكنني حقًا العثور على أي مزايا لهذا النهج تقترب حتى من التغلب على العيوب الهائلة.

أحد الحلول لمنع البريد العشوائي هو التأكد من أن السطر الأول أو السطر الأخير أو سطر معين يحتوي على سلسلة معينة، تشبه كلمة المرور تقريبًا، ولكن الجملة الكاملة أفضل.

أنت وحدك من يملك الكلمة أو الكلمات، وهي آمنة تمامًا، فقط تذكر حذف رسائل البريد الإلكتروني بعد الاستخدام وتلك التي لا تحتوي على السطر السري.

وبصرف النظر عن الأمن وسهولة الاستخدام، يمكن أن يكون تسليم البريد الإلكتروني مشكلة أخرى.اعتمادًا على مزود البريد الإلكتروني الخاص بالمستخدم، يمكن أن يتأخر تسليم البريد الإلكتروني من بضع دقائق إلى بضع ساعات.

هناك قصة تعليمية جميلة حقا thedailywtf.com على تصميم البرمجيات.ينبغي حل السؤال المطروح بالتصميم المناسب، وليس بالتكنولوجيا.

ألكساندر، يرجى قراءة القصة المرتبطة والتفكير في القفازات، وليس تصفح صفحات الويب عبر البريد الإلكتروني.

PHP ليست شاكوش.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top