Advertisement
  1. Code
  2. PHP
  3. PHP Scripts

كيفية إرسال رسائل نصية عبر PHP

Scroll to top

() translation by (you can also view the original English article)

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

في هذا البرنامج التعليمي، سوف نغطي أساسيات إرسال الرسائل النصية عبر PHP.


نظرة عامة

إرسال رسالة نصية SMS في الواقع سهل جداً.

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

سوف نحلل هذا الأمر -- في كل مرة:

  • تتألف الرسالة باستخدام تطبيق ويب التي يتم تخزينها و تنفيذها في خادم HTTP ومن ثم إرسالها عبر الإنترنت ("the cloud") كرسالة بريد إلكتروني.
  • تستلم بوابة خدمة الرسائل القصيرة البريد الإلكتروني، والتي تقوم بتحويل الرسالة من رسالة بريد إلكتروني إلى رسالة SMS.
  • ثم يتم تسليم رسالة SMS إلى مركز خدمة الرسائل القصيرة، الذي يعتبر بمثابة خادم يوجه البيانات إلى أجهزة محمولة محددة.
  • تنتقل الرسالة في النهاية عبر الشبكة اللاسلكية إلى المستلم.

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


البريد الالكتروني إلى الرسائل القصيرة

لإرسال رسالة نصية قصيرة (SMS) عبر البريد الإلكتروني، فلن تحتاج عموماً إلا إلى شيئين:

  • رقم الهاتف أو معرف فريد للهاتف المحمول الذي تريد الوصول إليه.
  • و اسم نطاق الشبكة اللاسلكية (يمكن العثور على العديد منها في قائمة البريد الإلكتروني إلى عناوين خدمة الرسائل النصية القصيرة).

يمكن اتباع الاتفاقية التالية لمعظم الناقلين:

1
phoneNumber@domainName.com

phoneNumber هو رقم هاتف الجهاز المحمول لإرسال الرسالة إليه، و domainName.com هو عنوان بوابة خدمة الرسالة النصية القصيرة الخاصة بالشبكة.

لإرسال نص إلى السيد. مثال، يمكنك أن تضيف ببساطة 3855550168x@vtext.com إلى البريد الإلكتروني لأي عميل، اكتب رسالة واضغط إرسال. سيؤدي هذا إلى إرسال رسالة نصية إلى رقم الهاتف 0168-555 (358) 1+ على الشبكة اللاسلكية Verizon.

على سبيل المثال، سأرسل رسالة نصية إلى نفسي باستخدام جيميل.

عندما يستلم هاتفي الرسالة، يجب أن تبدو هكذا:

رائع جداً!


وظيفة بريد PHP

فلنأخذ الأمور خطوة للأمام. باستخدام بوابة خدمة الرسائل النصية القصيرة SMS، يمكننا إرسال رسالة نصية عبر إيميل باستخدام وظيفة بريد PHP. وظيفة البريد لها التوقيع التالي:

1
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

يمكنك قراءة المزيد عنه هنا.

  • to$ يحدد المستلم أو مستلمي الرسالة. و تتضمن أمثلة صحيحة:

    • user@example.com
    • user1@example.com, user2@example.com
    • <User <user@example.com
    • User1 <user1@example.com>, User2 User2 <user2@example.com>
  • subject$ غنية عن التفسير، لا بد أنها سلسلة تحتوي على الموضوع المطلوب. ومع ذلك، لا تتطلب SMS موضوعاً.
  • message$ هي الرسالة التي ستسلم. كما ورد في كتيب PHP، "يجب أن يفصل كل سطر ب LF (\n) ينبغي أن لا تزيد الأسطر عن 70 حرف."

لتكرار الوظيفة السابقة، يمكننا كتابة رمز PHP التالي:

1
mail( '3855550168@vtext.com', '', 'Testing' );

توجيه اختبار

دعونا نجري اختباراً عبر PHP لنتأكد من إعداد كل شيء بشكل صحيح و أن وظيفة البريد سوف ترسل فعلياً رسالة نصية. باستخدام الرمز التالي، يمكننا إجراء:

1
<?php
2
3
var_dump( mail( '##########@vtext.com', '', 'This was sent with PHP.' ) ); // bool(true)

4
5
?>

عندما يستلم هاتفي الرسالة، فإنه يبدو كالتالي:

إذا ظهرت لك رسالة خطأ، فارجع إلى قسم استكشاف الأخطاء و إصلاحها.

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


إضافة قابلية الاستخدام

الترميز

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

1
<!DOCTYPE html>
2
 <head>
3
   <meta charset="utf-8" />
4
  </head>
5
  <body>
6
   <div id="container">
7
    <h1>Sending SMS with PHP</h1>
8
    <form action="" method="post">
9
     <ul>
10
      <li>
11
       <label for="phoneNumber">Phone Number</label>
12
       <input type="text" name="phoneNumber" id="phoneNumber" placeholder="3855550168" /></li>
13
      <li>
14
      <label for="carrier">Carrier</label>
15
       <input type="text" name="carrier" id="carrier" />
16
      </li>
17
      <li>
18
       <label for="smsMessage">Message</label>
19
       <textarea name="smsMessage" id="smsMessage" cols="45" rows="15"></textarea>
20
      </li>
21
     <li><input type="submit" name="sendMessage" id="sendMessage" value="Send Message" /></li>
22
    </ul>
23
   </form>
24
  </div>
25
 </body>
26
</html>

النمط

و بعد ذلك سنضيف بعض CSS:

1
body {
2
 margin: 0;
3
 padding: 3em 0;
4
 color: #fff;
5
 background: #0080d2;
6
 font-family: Georgia, Times New Roman, serif;
7
}
8
9
#container {
10
 width: 600px;
11
 background: #fff;
12
 color: #555;
13
 border: 3px solid #ccc;
14
 -webkit-border-radius: 10px;
15
 -moz-border-radius: 10px;
16
 -ms-border-radius: 10px;
17
 border-radius: 10px;
18
 border-top: 3px solid #ddd;
19
 padding: 1em 2em;
20
 margin: 0 auto;
21
 -webkit-box-shadow: 3px 7px 5px #000;
22
 -moz-box-shadow: 3px 7px 5px #000;
23
 -ms-box-shadow: 3px 7px 5px #000;
24
 box-shadow: 3px 7px 5px #000;
25
}
26
27
ul {
28
 list-style: none;
29
 padding: 0;
30
}
31
32
ul > li {
33
 padding: 0.12em 1em
34
}
35
36
label {
37
 display: block;
38
 float: left;
39
 width: 130px;
40
}
41
42
input, textarea {
43
 font-family: Georgia, Serif;
44
}

و هذا يعطينا الشكل البسيط التالي:


البرنامج النصي

الجزء الأكثر أهمية لهذا هو نص PHP. سنقوم بكتابة بعض الشيء من الرمز الآن:

1
<?php
2
3
if ( isset( $_REQUEST ) && !empty( $_REQUEST ) ) {
4
 if (
5
 isset( $_REQUEST['phoneNumber'], $_REQUEST['carrier'], $_REQUEST['smsMessage'] ) &&
6
  !empty( $_REQUEST['phoneNumber'] ) &&
7
  !empty( $_REQUEST['carrier'] )
8
 ) {
9
  $message = wordwrap( $_REQUEST['smsMessage'], 70 );
10
  $to = $_REQUEST['phoneNumber'] . '@' . $_REQUEST['carrier'];
11
  $result = @mail( $to, '', $message );
12
  print 'Message was sent to ' . $to;
13
 } else {
14
  print 'Not all information was submitted.';
15
 }
16
}
17
18
?>
19
<!DOCTYPE html>
  • يتحقق النص البرمجي أولاً لمعرفة ما إذا كان النموذج قد تم إرساله أم لا.
  • إذا كان الجواب نعم، فإنه يتحقق لمعرفة ما إذا تم إرسال رقم الهاتف، الناقل، و متغيرات خدمة الرسائل النصية القصيرة. و هذا مفيد في الحالة التي قد يكون فيها أكثر من نموذج على الصفحة.
  • إذا كان رقم الهاتف، الناقل و خدمة رسائل نصية قصيرة متوفرة و رقم الهاتف و الناقل ليسا فارغين، فإنه لا بأس بمحاولة إرسال الرسالة.
  • يجب أن تكون وسيطة الرسالة في وظيفة البريد 70 حرف في الطول لكل سطر. يمكننا أن نقسم الرسالة إلى 70 حرف باستخدام وظيفة wordwrap.
  • يتم ربط رقم الهاتف و الناقل ثم يتم إرسال الرسالة باستخدام وظيفة البريد.
  • في حال كانت البيانات ناقصة أو لا يمكن التحقق من صحتها، فإن البرنامج النصي لا يعود ببساطة بجميع المعلومات التي تم إرسالها.
  • وأخيراً، يعود البريد بقيمة منطقية تشير إلى ما إذا كان الإرسال ناجحاً أم لا. يتم تخزين القيمة في result$ في حال كنت بحاجة للتحقق من أن الرسالة في الواقع قد أرسلت.

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


الكود النهائي

1
<?php
2
3
if ( isset( $_REQUEST ) && !empty( $_REQUEST ) ) {
4
 if (
5
 isset( $_REQUEST['phoneNumber'], $_REQUEST['carrier'], $_REQUEST['smsMessage'] ) &&
6
  !empty( $_REQUEST['phoneNumber'] ) &&
7
  !empty( $_REQUEST['carrier'] )
8
 ) {
9
  $message = wordwrap( $_REQUEST['smsMessage'], 70 );
10
  $to = $_REQUEST['phoneNumber'] . '@' . $_REQUEST['carrier'];
11
  $result = @mail( $to, '', $message );
12
  print 'Message was sent to ' . $to;
13
 } else {
14
  print 'Not all information was submitted.';
15
 }
16
}
1
?>
2
<!DOCTYPE html>
3
 <head>
4
   <meta charset="utf-8" />
5
   <style>
6
    body {
7
     margin: 0;
8
     padding: 3em 0;
9
     color: #fff;
10
     background: #0080d2;
11
     font-family: Georgia, Times New Roman, serif;
12
    }
13
14
    #container {
15
     width: 600px;
16
     background: #fff;
17
     color: #555;
18
     border: 3px solid #ccc;
19
     -webkit-border-radius: 10px;
20
     -moz-border-radius: 10px;
21
     -ms-border-radius: 10px;
22
     border-radius: 10px;
23
     border-top: 3px solid #ddd;
24
     padding: 1em 2em;
25
     margin: 0 auto;
26
     -webkit-box-shadow: 3px 7px 5px #000;
27
     -moz-box-shadow: 3px 7px 5px #000;
28
     -ms-box-shadow: 3px 7px 5px #000;
29
     box-shadow: 3px 7px 5px #000;
30
    }
31
32
    ul {
33
     list-style: none;
34
     padding: 0;
35
    }
36
37
    ul > li {
38
     padding: 0.12em 1em
39
    }
40
41
    label {
42
     display: block;
43
     float: left;
44
     width: 130px;
45
    }
46
47
    input, textarea {
48
     font-family: Georgia, Serif;
49
    }
50
   </style>
51
  </head>
52
  <body>
53
   <div id="container">
54
    <h1>Sending SMS with PHP</h1>
55
    <form action="" method="post">
56
     <ul>
57
      <li>
58
       <label for="phoneNumber">Phone Number</label>
59
       <input type="text" name="phoneNumber" id="phoneNumber" placeholder="3855550168" /></li>
60
      <li>
61
      <label for="carrier">Carrier</label>
62
       <input type="text" name="carrier" id="carrier" />
63
      </li>
64
      <li>
65
       <label for="smsMessage">Message</label>
66
       <textarea name="smsMessage" id="smsMessage" cols="45" rows="15"></textarea>
67
      </li>
68
     <li><input type="submit" name="sendMessage" id="sendMessage" value="Send Message" /></li>
69
    </ul>
70
   </form>
71
  </div>
72
 </body>
73
</html>

استكشاف الأخطاء و إصلاحها

خطأ Localhost

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

1
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\sms\mail-test.php

...سيجب عليك تثبيت و تكوين خادم البريد. هذا خارج نطاق هذا البرنامج التعليمي. مع ذلك، إذا كنت تعمل على جهازك المحلي، الانتقال إلى شيء مثل XAMPP قد يحل هذه المشكلة. بدلاً من ذلك، حاول تثبيت Mercury Mail إلى جانب WAMP، MAMP أو على نظام LAMP (أو SAMP أو OAMP، إلخ.) (هناك الكثير من 'AMPS').

PHPMailer

خيار آخر (وهو الأسلوب الذي أفضله) وهو استخدام PHPMailer و فيما يلي مثال على كيفية استخدام PHPMailer للاتصال بملقم SMTP في جيميل و إرسال الرسالة.

استخدامه بسيط مثل إدراج فئة في البرنامج النصي الخاص بك.

1
require 'class.phpmailer.php';
2
3
// Instantiate Class

4
$mail = new PHPMailer();
5
6
// Set up SMTP

7
$mail->IsSMTP();                // Sets up a SMTP connection

8
$mail->SMTPDebug  = 2;          // This will print debugging info

9
$mail->SMTPAuth = true;         // Connection with the SMTP does require authorization

10
$mail->SMTPSecure = "tls";      // Connect using a TLS connection

11
$mail->Host = "smtp.gmail.com";
12
$mail->Port = 587;
13
$mail->Encoding = '7bit';       // SMS uses 7-bit encoding

14
15
// Authentication

16
$mail->Username   = "email.address@gmail.com"; // Login

17
$mail->Password   = "password"; // Password

18
19
// Compose

20
$mail->Subject = "Testing";     // Subject (which isn't required)

21
$mail->Body = "Testing";        // Body of our message

22
23
// Send To

24
$mail->AddAddress( "##########@vtext.com" ); // Where to send it

25
var_dump( $mail->send() );      // Send!

ينبغي طباعة شيء على غرار ما يلي:

قد يستغرق الأمر أكثر قليلاً لإعداد الاتصال تبعاً لحالتك. إذا كنت تخطط لاستخدام جيميل، فقد توفر جوجل معلومات حول الاتصال information on connecting


الخاتمة

هناك عدد لا يحصى من الأساليب لإنجاز مهمة إرسال الرسائل القصيرة SMS من خلال تطبيق ويب. هذا الأسلوب يُعنى بانخفاض حجم الرسائل القصيرة (على الأرجح أقل من 1000 رسالة شهرياً) و مطورين يسعون إلى الحصول على الخبرة بدون التفرع النقدي. تشمل خيارات أخرى:

  • استخدام مزود بوابة الرسائل القصيرة

    • سيؤدي إجراء بحث جوجل Google search إلى عرض الكثير من الخيارات.
    • يشمل معظم مزودي بوابة الرسائل القصيرة API لإرسال الرسائل عبر تطبيق ويب.
    • يمكنك عادة الاشتراك في الخدمة يسعر معقول، على افتراض أنك كنت تخطط لإرسال ما لا يقل عن 1000 رسالة نصية شهرياً.
    • يمكنك استئجار رقم كود قصير short code number.
  • باستخدام مودم GSM

    • يمكن أن تكون هذه الطريقة مكلفة و بطيئة للقيام بذلك، حيث أنه يجب عليك شراء مودم و عمل تعاقد مع شبكة لاسلكية
    • سيجب عليك أيضاً استخدام مجموعة أوامر AT (Hayes) command set.
  • استخدم اتصال مباشر بشبكة لاسلكية، الأمر الذي سيتطلب تفاوض قوي وكثير من المال.

هذا البرنامج التعليمي ليس بأي شكل من الأشكال استعراض شامل لكيفية إرسال رسائل نصية ب PHP; لكن ينبغي البدء! آمل أن يكون هذا البرنامج التعليمي قد حقق الفائدة لك. شكراً جزيلاً لقراءتك!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.