البريد المؤقت الخاص: telegram bot

غالبًا باستخدام أدوات وقدرات جديدة ، هناك رغبة لتجربة وتنفيذ شيء غير عادي ، وهو ما لم أقم به من قبل. كانت فكرة إنشاء خدمة البريد المؤقت الخاصة بي في صورة telegrams bot بالنسبة لي مثيرة للاهتمام للغاية.

خلفية صغيرة
منذ وقت ليس ببعيد ، انتقلت من استضافة منتظمة إلى VPS وحدث ذلك بعد مرور شهر أو أكثر بقليل ، اضطررت مرة أخرى إلى الانتقال إلى VPS آخر. في كلتا الحالتين ، كان لدي أرخص خطة التعرفة وأوبونتو 16.04. منذ آخر مرة في ذلك الوقت واجهت محطة في الجامعة ، والتي كانت بمثابة نقص تام في الخبرة ، استخدمت الإرشادات التفصيلية الممتازة من DigitalOcean لتكوين VPS الخاص بي (تمت ترجمة بعضها إلى الروسية لأولئك الذين ، مثلي ، ليسوا كافيًا يعرف الانجليزية). ونعم ، كان VPS الأول الخاص بي يعمل ، وكان علي الانتقال مرة أخرى بشكل رئيسي لأن جزءًا من عناوين IP الخاصة به يقع تحت توزيع ILV. بعد تكرار إجراء الإعداد LAMP عدة مرات ، اعتدت على محطة VPS قليلاً ، وكجزء من تطويرها الإضافي ، قررت التبديل إلى تجارب غير عادية - لإنشاء خدمة البريد المؤقت الخاصة بي ، على سبيل المثال.

لقد سبق لي أن اكتسبت خبرة في الخلفية ، وخاصة في إنشاء روبوتات برقية في PHP MySQL ، لكن لتلقي البريد الإلكتروني "لنفسي" - بدا الأمر بعيد المنال وغير مفهوم. بعد أن فتحت عدة علامات تبويب بمقالات مختلفة حول الموضوع ، أدركت أنني لم أفهم شيئًا. في كل مكان ، تم اقتراح استخدام الكثير من الأدوات المختلفة ، والتي في رأيي كانت أكثر ملاءمة لخدمة البريد الإلكتروني كاملة من مهمة تلقي رسائل البريد الإلكتروني الواردة على VPS.

تلقي البريد الوارد


بالنسبة للخطوة الأولى ، ساعدني مقال من صندوق الحماية كثيرًا: habr.com/en/post/260429 . لفتت الانتباه إلى تقييمها السلبي ، لكنه يصف بالضبط ما الذي أثار اهتمامي. كنت أرغب في الحصول على نتيجة يمكن أن أشعر بها "بأسرع ما يمكن ، وبالأفكار" في المستقبل سأفعل ذلك بشكل صحيح "ذهبت لتكوين sendmail.

ثم قمت بإعداد المجال. سجلات DNS:

example.com IN MX 5 mail.example.com
mail.example.com IN A XXX.XX.XXX.XXX (عنوان IP VPS)

على الخادم ، أضف السطر @example.com vasya /etc/mail/virtusertable الملف /etc/mail/virtusertable ، وبالتالي تحديد أن كل البريد المخصص لأي عناوين على ****@example.com قد تم توجيهه إلى Vasya.

لمعالجة البريد الوارد باستخدام البرنامج النصي php ، أضف السطر vasya: "|php -q /home/vasya/mail.php" إلى الملف /etc/aliases vasya: "|php -q /home/vasya/mail.php" .

بعد إجراء العديد من الاختبارات والتأكد من تمرير البريد الوارد إلى البرنامج النصي php ، يمكنني التعامل مع معالجته.

يتم استلام البريد الوارد الوارد إلى php بالطريقة الموضحة أعلاه في الكود بكل بساطة:

 $msg = file_get_contents("php://stdin"); 

هناك مسألة مختلفة تمامًا وهي تحليل تنسيق البريد وعرض البيانات بطريقة مفهومة ويمكن الوصول إليها. قدمت لي Google عدة خيارات حول كيفية تحليل تنسيق البريد باستخدام PHP. كل المكتبات التي عثرت عليها تم جرها على تثبيت مكونات إضافية ، ولكن يبدو أن واحدة منها كانت أقل تعقيدًا: github.com/zbateson/mail-mime-parser . الشيء الوحيد الذي كنت بحاجة لتثبيت بالإضافة إلى ذلك هو مدير الحزم الشهير لـ PHP - Composer. بالطبع ، لم أصادفها في الاستضافة المعتادة ، لكن تثبيتها وتوصيل المكتبة لمزيد من تحليل البريد لم يكن أمرًا صعبًا على الإطلاق.

تبدو بداية البرنامج النصي php لمعالجة البريد الوارد باستخدام مكتبة zbateson / mail-mime-parser كما يلي:

 <?php require("vendor/autoload.php"); use ZBateson\MailMimeParser\MailMimeParser; use ZBateson\MailMimeParser\Message; $msg = file_get_contents("php://stdin"); $parser = new MailMimeParser(); $message = Message::from($msg); 

نظرًا لأن البريد المؤقت في رأيي لا يشمل عدة مستلمين ، يكفي أن تأخذ فقط أول المستلمين المحتملين:

 $to = $message->getHeader('To'); $email = $to->getAddresses()[0]->getEmail(); 

في متغير البريد الإلكتروني ، لدينا عنوان المستلم للنموذج vasyaorpetya@example.com.

لاستلام محتوى الرسائل الواردة في المكتبة ، هناك طرق مناسبة:

 $from = $message->getHeader('From')->getEmail(); $subject = $message->getHeaderValue('Subject'); $msg_text = $message->getTextContent(); $msg_html = $message->getHtmlContent(); 

البرقية بوت


ما الذي يجب أن تفعله بوت البريد المؤقت برقية في البداية؟

  1. إصدار عنوان بريد إلكتروني مؤقت جديد عند الطلب
  2. إرسال رسائل البريد الوارد لهذا البريد الإلكتروني بينما عنوان البريد صالح
  3. تجديد عنوان البريد الإلكتروني

هناك طريقة مناسبة تمامًا في هذه الحالة والعديد من الحالات الأخرى لتلقي التحديثات من Telegram وهي استخدام Webhook. مطلوب فقط عنوان البرنامج النصي مع https. استخدام Certbot لتكوين شهادة مجال SSL موصوف بالتفصيل في تعليمات DO.

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

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

وظائف ترجمة معرف رقمي إلى سلسلة والعكس بالعكس:

 // $alphabet = explode(",", "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"); //   @grayfolk: $alphabet = range('a', 'z'); function num2str($n, $a) { // $a -  $b = count($a); $r = 0; $x = ""; while ($n) { $r = $n%$b; $n = ($n-$r)/$b; $x .= $a[$r]; } return strrev($x); } function str2num($s, $a) { $n = 0; $b = count($a); $s = strrev($s); for ($i = 0; $i < strlen($s); $i++) { $n += array_search($s[$i], $a) * pow($b, $i); } return $n; } 

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

نكتب سطرًا عشوائيًا لعنوان البريد الإلكتروني الصادر في قاعدة البيانات مع معرف المستلم ومعرف المستخدم في التلغراف والوقت الذي تم فيه إصدار صندوق البريد.

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

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

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



قائمة الامنيات للمستقبل:

  • إنشاء نسخة على شبكة الإنترنت
  • قم بإعداد تغيير سريع لمجال البريد ببضع نقرات / أوامر (كيف؟)

مراجع


Telegram bot:tmpmailbot

مقالة تصف تكوين sendmail

مكتبة PHP لتحليل البريد الإلكتروني

Source: https://habr.com/ru/post/ar445988/


All Articles