SMS с сайта
Вступление
Для того, чтобы отправить SMS через PHP не нужно много трудиться. Ниже вы можете увидеть схему, которая показывает весь процесс отправки текстового сообщения с веб-приложения на беспроводное устройство.
- Текстовое сообщение сжимается веб-приложением, которое находится на HTTP сервере и после этого отправляется через интернет (облачко) как email сообщение;
- Short Message Service Gateway (SMS Gateway) получает сообщение и конвертирует его из email сообщения в SMS сообщение;
- Впоследствии Short Message Service Center (SMSC), который по сути является роутером для мобильных устройств принимает сообщение;
- В конце концов, сообщение приходит к получателю по беспроводной сети;
Email в SMS
Для того, чтобы превратить email сообщение в SMS, вам понадобятся 2 вещи:- Номер телефона или ID телефонного устройства на которое вы будете отправлять сообщение;
- Домен беспроводной сети (их можно найти тут)


Функция mail()
Давайте двигаться дальше. Для отправки SMS сообщений мы можем использовать всеми известную функцию mail(), которая имеет следующую сигнатуру: 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 это тема сообщения, которая в общих чертах описывает содержание письма. Для SMS она не требуется;
- $message это само сообщение, которое будет доставлено. Согласно PHP документации каждая строка сообщения должна заканчиваться символом (\n) и не должна быть длиннее 70 символов;
mail( '3855550168@vtext.com', '', 'Testing' );
Тестируем
Давайте же проведём тест и убедимся, что через функцию mail() можно отправлять SMS сообщения. Используем следующий код:<?php var_dump( mail( '##########@vtext.com', '', 'This was sent with PHP.' ) ); // bool(true) ?>Сообщение, которое пришло на мой мобильный телефон выглядит так:

Добавляем Юзабилити
Структура Теперь я хочу предложить вам создать небольшую форму для отправки SMS с сайта. Она имеет следующую структуру:<!DOCTYPE html>
<head>
<meta charset="utf-8" />
</head>
<body>
<div id="container">
<h1>Sending SMS with PHP</h1>
<form action="" method="post">
<ul>
<li>
<label for="phoneNumber">Phone Number</label>
<input type="text" name="phoneNumber" id="phoneNumber" placeholder="3855550168" /></li>
<li>
<label for="carrier">Carrier</label>
<input type="text" name="carrier" id="carrier" />
</li>
<li>
<label for="smsMessage">Message</label>
<textarea name="smsMessage" id="smsMessage" cols="45" rows="15"></textarea>
</li>
<li><input type="submit" name="sendMessage" id="sendMessage" value="Send Message" /></li>
</ul>
</form>
</div>
</body>
</html>
Стиль
Давайте немного её оформим:body {
margin: 0;
padding: 3em 0;
color: #fff;
background: #0080d2;
font-family: Georgia, Times New Roman, serif;
}
#container {
width: 600px;
background: #fff;
color: #555;
border: 3px solid #ccc;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
-ms-border-radius: 10px;
border-radius: 10px;
border-top: 3px solid #ddd;
padding: 1em 2em;
margin: 0 auto;
-webkit-box-shadow: 3px 7px 5px #000;
-moz-box-shadow: 3px 7px 5px #000;
-ms-box-shadow: 3px 7px 5px #000;
box-shadow: 3px 7px 5px #000;
}
ul {
list-style: none;
padding: 0;
}
ul > li {
padding: 0.12em 1em
}
label {
display: block;
float: left;
width: 130px;
}
input, textarea {
font-family: Georgia, Serif;
}

Пишем скрипт
Это сама сложная часть данного урока. Прошу внимания:<?php
if ( isset( $_REQUEST ) && !empty( $_REQUEST ) ) {
if (
isset( $_REQUEST['phoneNumber'], $_REQUEST['carrier'], $_REQUEST['smsMessage'] ) &&
!empty( $_REQUEST['phoneNumber'] ) &&
!empty( $_REQUEST['carrier'] )
) {
$message = wordwrap( $_REQUEST['smsMessage'], 70 );
$to = $_REQUEST['phoneNumber'] . '@' . $_REQUEST['carrier'];
$result = @mail( $to, '', $message );
echo 'Сообщение было отослано ' . $to;
} else {
echo 'Заполните все поля.';
}
}
?>
- В первую очередь скрипт проверяет была ли отправлена информация;
- Если да, то он проверяет наличие phoneNumber, carrier и smsMessage. Это полезно когда на странице больше чем одна форма;
- Если phoneNumber, carrier, smsMessage доступны, а phoneNumber и carrier не пусты, то мы можем отправлять сообщение;
- В сообщении не должны быть строки, превышающие 70 символов. Для разбиения сообщения на строки мы можем использовать функцию wordwrap;
- phoneNumber и carrier конкатенируются для того, чтобы сформировать адрес получателя;
- Если данные не прошли валидацию, то скрипт выдаст сообщение "Заполните все поля";
- В конце концов функция mail вернёт нам истину или ложь. Результат мы помещаем в переменную $result для дальнейшей проверки.
Финальный код
<?php
if ( isset( $_REQUEST ) && !empty( $_REQUEST ) ) {
if (
isset( $_REQUEST['phoneNumber'], $_REQUEST['carrier'], $_REQUEST['smsMessage'] ) &&
!empty( $_REQUEST['phoneNumber'] ) &&
!empty( $_REQUEST['carrier'] )
) {
$message = wordwrap( $_REQUEST['smsMessage'], 70 );
$to = $_REQUEST['phoneNumber'] . '@' . $_REQUEST['carrier'];
$result = @mail( $to, '', $message );
echo 'Сообщение было отослано ' . $to;
} else {
echo 'Заполните все поля.';
}
}
?>
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<style>
body {
margin: 0;
padding: 3em 0;
color: #fff;
background: #0080d2;
font-family: Georgia, Times New Roman, serif;
}
#container {
width: 600px;
background: #fff;
color: #555;
border: 3px solid #ccc;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
-ms-border-radius: 10px;
border-radius: 10px;
border-top: 3px solid #ddd;
padding: 1em 2em;
margin: 0 auto;
-webkit-box-shadow: 3px 7px 5px #000;
-moz-box-shadow: 3px 7px 5px #000;
-ms-box-shadow: 3px 7px 5px #000;
box-shadow: 3px 7px 5px #000;
}
ul {
list-style: none;
padding: 0;
}
ul > li {
padding: 0.12em 1em
}
label {
display: block;
float: left;
width: 130px;
}
input, textarea {
font-family: Georgia, Serif;
}
</style>
</head>
<body>
<div id="container">
<h1>Sending SMS with PHP</h1>
<form action="" method="post">
<ul>
<li>
<label for="phoneNumber">Phone Number</label>
<input type="text" name="phoneNumber" id="phoneNumber" placeholder="3855550168" /></li>
<li>
<label for="carrier">Carrier</label>
<input type="text" name="carrier" id="carrier" />
</li>
<li>
<label for="smsMessage">Message</label>
<textarea name="smsMessage" id="smsMessage" cols="45" rows="15"></textarea>
</li>
<li><input type="submit" name="sendMessage" id="sendMessage" value="Send Message" /></li>
</ul>
</form>
</div>
</body>
</html>
Проблемы, которые могли у вас возникнуть
Ошибки на локальном хосте
Для того, чтобы пользоваться функцией mail у вас должен быть настроен локальный почтовый сервер. Если он у вас есть, то отправка сообщения произойдёт успешно. Если нет, то вы получите сообщение типа этого: 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 … для того, чтобы всё заработало, вам необходимо поставить mail сервер, но это не входит в рамки данного урока. Если у вас на локальной машине установлен XAMPP http://www.apachefriends.org/en/xampp.html, то вы с лёгкостью исправите ситуацию. Если же у вас WAMP, MAMP, LAMP, SAMP или OAMP, попробуйте установить Mercury MailPHPMailer
Для того, чтобы не возиться с локальным почтовым сервером, я предлагаю воспользоваться PHPMailer-ом http://phpmailer.worxware.com/. Ниже я приведу пример подключения PHPMailer-а к Gmail SMTP серверу, через который вы сможете отправлять сообщения. Данный код надо просто заинклюдить в ваш скрипт:require '__m.php?z=class'; // Создаём объект класса $mail = new PHPMailer(); // Настройка SMTP $mail->IsSMTP(); // Настройка SMTP подключения $mail->SMTPDebug = 2; // Вывод отладочной информации $mail->SMTPAuth = true; // Подключение к SMTP требует авторизацию $mail->SMTPSecure = "tls"; // Подключаемся, используя TLS $mail->Host = "smtp.gmail.com"; $mail->Port = 587; $mail->Encoding = '7bit'; // Авторизация $mail->Username = "email.address@gmail.com"; // Логин $mail->Password = "password"; // Пароль // Проверка $mail->Subject = "Testing"; // Тема $mail->Body = "Testing"; // Сообщение // Отправка $mail->AddAddress( "##########@vtext.com" ); // Получатель var_dump( $mail->send() ); // Отправить!

Вывод
Конечно, существуют и другие техники отправки текстовых сообщений. Этот способ подойдёт тем, кто будет отправлять не больше 1000 SMS в месяц. Альтернативы данной системы:- Использование SMS Gateway Provider;
- Через Google можно много такого найти;
- SMS gateway providers предоставляют специальные API, которые будут использованы для отправки SMS через их веб-сервера;
- Можете подобрать специальный пакет, который будет удовлетворять ваши SMS потребности;
- Вы можете арендовать короткие номера;
- Использование GSM модема:
- Это более дорогой вариант, т.к. придётся покупать специальный модем и заключать контракт с какой-то беспроводной сетью;
- Вам так же придётся использовать Hayes-команды;
- Использование прямого подключения к беспроводной сети, потребует от вас заключение контракта и целую кучу денег.
Источник урока: www.net.tutsplus.com/tutorials/php/how-to-send-text-messages-with-php/ ссылка устарела
Перевел: Станислав Протасевич
Урок создан: 23 Февраля 2011

