PHP দিয়ে কিভাবে টেক্সট মেসেজ পাঠানো যায়
() translation by (you can also view the original English article)
টেক্সট মেসেজের প্রসার বিশ্বব্যাপী - এর ফলে অনেক ওয়েব অ্যাপেই এখন টেক্সট মেসেজ ইন্টিগ্রেশন করা হচ্ছে, যা ইভেন্ট, সেলস ও কুপনের খবর মোবাইলে পাঠাতে ব্যবহার করা হয়।
টিউটোরিয়ালে আমরা PHP দিয়ে টেক্সট মেসেজ পাঠানোর বেসিক দেখবো।
ওভারভিউ
টেক্সট মেসেজ (SMS) পাঠানো আসলে অনেক সহজ কাজ।
ওয়েব অ্যাপ্লিকেশনকে কিভাবে একটি ওয়্যারলেস ডিভাইসের সাথে যুক্ত করতে হয় তা নিচভে একটি ডায়াগ্রামে দেখানো হল।



আসুনে দেখে নেই - ধাপে ধাপে এখানে কি হচ্ছেঃ
- মেসেজ ওয়েব অ্যাপ্লিকেশনে কম্পোজ করে স্টোর করা হয়, এরপর সেটি HTTP সার্ভার ব্যবহার করে ইন্টারনেটের মাধ্যমে ইমেইল হিসেবে সেন্ড করা হয়।
- ইমেইলটি একটি এসএমএস গেটওয়ে দিয়ে রিসিভ করে (SMS Gateway) সেটিকে একটি এসএমএস এ কনভার্ট করা হয়।
- এরপর এসএমএস টি একটি শর্ট মেসেজ সার্ভিস সেন্টারের (SMSC) মাধ্যমে মোবাইলে সেন্ড করা হয়।
- এরপর ওয়্যারলেস নেটওয়ার্কের মাধ্যমে এসএমএস গ্রাহকের কাছে পৌঁছে যাবে।
সব ওয়্যারলেস নেটওয়ার্কেরই এসএমএস গেটওয়ে আছে, যেটা দিয়ে এই পদ্ধতিতে ইমেইলের মাধ্যে এসএমএস সেন্ড করা যায়। এই পদ্ধতি ব্যবহার করা ডেভেলাপারদের জন্য সুবিধার, কারণ ডেভেলাপারদের জন্য এটি ফ্রি। কিন্তু গ্রাহকদের জন্য ফ্রি না। প্রায় সময় গ্রাহকদের এই মেসেজের চার্জ দিতে হয়। এই এসএসএম নন নেটওয়ার্ক হলে এটার জন্য গ্রাহকদের খরচ দিতে হয়। নেটওয়ার্ক মেসেজ সাধারণ ফ্রি হয়ে থাকে।
ইমেইল টু এসএমএস
ইমেইল দিয়ে এসএমএস করতে দুইটি জিনিষ াগবেঃ
- যেই ফোনে মেসেজ পাঠাবেন সেটার নাম্বার, বা ইউনিক আইডেন্টিফিকেশন নাম্বার
- ওয়্যারলেস নেটওয়ার্কের ডোমাইন নেম (এই লিস্টে অনেক অ্যাড্রেস আছে)
এই কাজ একাধিক ক্যারিারের জন্য করা সম্ভবঃ
1 |
phoneNumber@domainName.com |
phoneNumber
হচ্ছে মোবাইলের নাম্বার, আর domainName.com
হচ্ছে এমএসমএস গেটওয়ে নেটওয়ার্কের অ্যাড্রেস।
ইমেইল ক্লায়েন্টে 3855550168@vtext.com (উদাহরণ) অ্যাড করুন, মেসেজ টাইপ করে সেন্ড করুন। মেসেজ Verizon Wireless Network এর +1 (385) 555-0168 এর নাম্বারে পৌঁছে যাবে।
যেমন, আমি নিজেকে জিমেইল দিয়ে একটি মেসেজ পাঠাবো।



ফোনে এই মেসেজ আসার পরে এমন দেখা যাবেঃ



বাহ!
পিএইচপি mail
ফাংশন
আসুন আরও এক ধাপ আগাই। এসএমএস গেটওয়ের মাধ্যমে পিএইচপি mail
ফাংশন দিয়ে মেসেজ সেন্ড করা যায়। mail
ফাংশনের সিগনেচার।
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@example.com>
-
$subject
এ মেসেজের সাব্জেক্ট থাকবে। কিন্তু এসএমএসে এর সাব্জেক্ট থাকা বাধ্যতামূলক না। -
$message
এ যেই মেসেজ সেন্ড করবেন সেটা। পিএইচপি ম্যানুয়ালে যেমন লেখা ছিলো। "প্রতি লাইন LF দিয়ে সেপারেটেড থাকবে (\n)। প্রতি লাইনে ৭০ অক্ষরের বেশি থাকতে পারবে না।
আগের ফাংশনালিটি রেপ্লিকেট করতে আমরা এই কোড ব্যবহার করবঃ
1 |
mail( '3855550168@vtext.com', '', 'Testing' ); |
টেস্ট রান
আসুন টেস্ট করে দেখি mail
ফাংশন দিয়ে আসলেই মেসেজ ডেলিভারি হল কিনা। আমরা যেই কোড রান করলামঃ
1 |
<?php
|
2 |
|
3 |
var_dump( mail( '##########@vtext.com', '', 'This was sent with PHP.' ) ); // bool(true) |
4 |
|
5 |
?>
|
ফোনে আসা মেসেজ দেখতে এইরকমঃ



Error পেলে troubleshooting সেকশন চেক করুন।
উপরে যেই মেসেজটা দেখলাম, সেটায় লেখা যে সেটা Gmail থেকে আসা। কারণ আউটগোয়িং সব মেসেজ লোকাল সার্ভার থেকে রাউট করা। এটা টিউটোরিয়াল লেখার সময় আমি From
হেডারের ভ্যালু চেঞ্জ করে সেটায় অলটারনেট অ্যাড্রেস বসাতে পারিনি। তাই এসএমএস গেটওয়ে তে ইমেইল হেডারের ডাটাই রয়ে গেছে। আপনার কাছে এর সমাধান থাকলে আমাদের অবশ্যই কমেন্ট করে জানান যেন অন্যরাও উপকৃত হয়!
ইউজেবিলিট অ্যাড করা
মার্কআপ
আসুন ইন্টারফেসে কোড র্যাপ করি। একটি ফর্ম সেটাপ করবঃ
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>
|
স্টাইল
কিছু সিএসএস অ্যাড করিঃ
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 |
}
|
এতে আমরা একটি সিম্পল ফর্ম পাবোঃ



স্ক্রিপ্ট
এটার মধ্যে সবচেয়ে ইম্পর্টেন্ট হচ্ছে পিএইচপি স্ক্রিপ্ট। সেটি আমরা এখন লিখবোঃ
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>
|
- স্ক্রিপ্টটি প্রথমে দেখবে যে ফর্মটি সাবমিট হয়েছে কিনা।
- হলে, চেক করবে
phoneNumber
,carrier
এবংsmsMessage ভ্যারিয়েবল্গুলো সেন্ড হয়েছে কিনা।
পেজে একটির বেশি ফর্ম থাকলে এই ধাপটি কাজে আসবে। -
phoneNumber
,carrier
এবংsmsMessage
থাকলে, যদিphoneNumber
এবংcarrier
খালি না থাকে, তবে মেসেজ সেন্ড করার চেষ্টা করা হবে। -
mail
ফাংশনে মেসেজ আর্গুমেন্ট প্রতি লাইনে ৭০ ক্যারেক্টারের বেশি হতে পারবে না।wordwrap
ফাংশন দিয়ে মেসেজ প্রতি লাইনে ৭০ ক্যারেক্টার করে ভাগ করে নেয়া যায়। -
mail
ফাংশন কল করেphoneNumber
ওcarrier
কনক্যাটনেট করা হয়। - ডাটা মিসিং থাকলে বা ভ্যালিডেট না হলে Not all information was submitted মেসেজ আসবে।
- এরপর,
mail
ফাংশন থেকে সাকসেসফুল না আনসাকসেসফুল মেসেজ আসবে। সেই ভ্যালু$result
ভ্যারিয়েবলে জমা হবে যেন পরে চেক করা যায় যে মেসেজ গিয়েছে কি না।
নোটঃ mail
মেথড দিয়ে শুধু বোঝা যায় যে মেসেজ গিয়েছে কি যায়নি। প্রাপকের ডিভাইসে মেসেজ পৌছেছে কিনা তা বোঝা যায়না।
ফাইনাল কোড
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 Error
mail
ফাংশন ব্যবহার করতে লোকাল সার্ভার অন রাখতে হয়। ওয়েব হোস্টে রান করলে কোন সমস্যা নেই। শিওর না হলে অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন। পিসির ক্ষেত্রেও একই ব্যাপার প্রযোজ্য। যদি এমন এরর দেখেন...
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 এর মত কিছু ব্যবহার করে এই সমস্যা সমাধান করা যায়। অথবা WAMP, MAMP বা LAMP (বা SAMP বা OAMP, ইত্যাদি) এর উপর Mercury Mail রান করুন।
PHPMailer
আরেকটি বিকল্প হচ্ছে PHPMailer। PHPMailer এর সাথে Gmail's 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।
পরিশেষ
ওয়েব অ্যাপ্লিকেশন থেকে এসএমএস পাঠানোর অনেক রকম উপায় আছে। এই মেথডে লো ভলিউল মেসেজ করা যায় (মাসে ১০০০ এর বেশি না)। এটা বানাতে ডেভেলাপারদের বেশি খরচও হয়না। অন্য উপায়গুলো হচ্ছেঃ
- এসএমএস গেটওয়ে প্রোভাইডার
- Google search করেও অনেক উপায় পাওয়া যায়।
- অনেক এসএমএস গেটওয়ে প্রোভাইডার ওয়েবঅ্যাপ্লিকেশন দিয়ে এসএমএস পাঠাতে API সরবরাহ করে থাকে।
- মাসে ১০০০ এর বেশি মেসেজ পাঠাতে হলে কোন অনলাইন সার্ভিস কিনে ব্যবহারও করা যায়।
- একটি শর্টকোড নাম্বার ভাড়া করতে পারেন।
- জিএসএম মডেম ব্যবহার করে
- এতে খরচ ও সময় বেশি লাগে, আর টেলিকমিউনিকেশন প্যাকেজ ব্যবহার করে মেসেজ পাঠাতে হবে।
- সাথে AT (Hayes) command set ব্যবহার করতে হবে।
- ওয়্যারলেস নেটওয়ার্কের ডায়রেক্ট কানেকশন ব্যবহার করতে অনেক দরদাম করতে হয় আর টাকাও বেশি লাগে।
এই টিউটোরিয়ালটি এই কাজের জন্য পরিপূর্ণ নয়, কিন্তু কাজ শুরু করতে এটি একটি চমৎকার স্টার্টিং পয়েন্ট! আশা করি এটা আপনার ভালো লেগেছে। পড়ার জন্য ধন্যবাদ।