01 июн 2011
Отправка SMS при помощи PHP
wiillow Категория: Web-Мастеру » Скрипты
У нас вы можете скачать бесплатно Отправка SMS при помощи PHP

Данный материал предоставлен сайтом Skripter.info исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Отправка SMS при помощи PHP

В наше время SMS широко применяются в веб-технологиях. Их используют для того, чтобы сообщить клиентам о свежих новостях, событиях и продуктах. Именно поэтому растёт рост разработчиков, которые интересуются данным инструментом. В этом уроке мы рассмотрим фундаментальные основы отправки текстовых сообщений при помощи PHP.


Вступление

Для того, чтобы отправить SMS через PHP не нужно много трудиться. Ниже вы можете увидеть схему, которая показывает весь процесс отправки текстового сообщения с веб-приложения на беспроводное устройство.
Отправка SMS при помощи PHP

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

Большинство беспроводных сетей имеют в наличии инструмент, который преобразовывает email сообщения в SMS. Для разработчиков это является бесплатным, а для конечных получателей не всегда, т.к. им может прийти счёт за не сетевое сообщение.


Для того, чтобы превратить email сообщение в SMS, вам понадобятся 2 вещи:
Номер телефона или ID телефонного устройства на которое вы будете отправлять сообщение;
Домен беспроводной сети (их можно найти тут)

Оно может выглядеть приблизительно так: phoneNumber@domainName.com

phoneNumber это номер телефона на который будет отправлен SMS. domainName.com - адрес SMS Gateway (системы, через которую будет отослан ваш смс);

Для того, чтобы отправить SMS мистеру Example, вам необходимо в графе получателя в вашем почтовом клиенте написать 3855550168@vtext.com и отправить письмо. Оно будет доставлено на номер +1 (385) 555-0168 через беспроводную сеть Verizon.

К примеру, я пошлю сообщение самому себе через Gmail:
Отправка SMS при помощи PHP

Когда я получу сообщение оно будет выглядеть следующим образом:
Отправка SMS при помощи PHP

Функция 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
User1 , User2
$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 при помощи PHP

Как вы видите, сообщение пришло через систему Gmail. Это произошло из-за того, что я выставил соответствующие настройки для отправки сообщений с локальной машины.
Добавляем Юзабилити

Структура

Теперь я хочу предложить вам создать небольшую форму для отправки 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;
}

Вот что у нас получилось:
Отправка SMS при помощи PHP

Пишем скрипт

Это сама сложная часть данного урока. Прошу внимания:
<?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 );
  print 'Сообщение было отослано ' . $to;
} else {
  print 'Заполните все поля.';
}
}
?>

В первую очередь скрипт проверяет была ли отправлена информация;
Если да, то он проверяет наличие phoneNumber, carrier и smsMessage. Это полезно когда на странице больше чем одна форма;
Если phoneNumber, carrier, smsMessage доступны, а phoneNumber и carrier не пусты, то мы можем отправлять сообщение;
В сообщении не должны быть строки, превышающие 70 символов. Для разбиения сообщения на строки мы можем использовать функцию wordwrap;
phoneNumber и carrier конкатенируются для того, чтобы сформировать адрес получателя;
Если данные не прошли валидацию, то скрипт выдаст сообщение “Заполните все поля”;
В конце концов функция mail вернёт нам истину или ложь. Результат мы помещаем в переменную $result для дальнейшей проверки.

Запомните, что mail() возвращает результат отправки сообщения и всё. Дошло письмо или нет - остаётся неизвестным.

Финальный код
<?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 );
  print 'Сообщение было отослано ' . $to;
} else {
  print 'Заполните все поля.';
}
}

?>
<!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 https://www.apachefriends.org/en/xampp.html, то вы с лёгкостью исправите ситуацию. Если же у вас WAMP, MAMP, LAMP, SAMP или OAMP, попробуйте установить Mercury Mail
PHPMailer

Для того, чтобы не возиться с локальным почтовым сервером, я предлагаю воспользоваться PHPMailer-ом https://phpmailer.worxware.com/. Ниже я приведу пример подключения PHPMailer-а к Gmail SMTP серверу, через который вы сможете отправлять сообщения.

Данный код надо просто заинклудить в ваш скрипт:
require 'class.phpmailer.php';

// Создаём объект класса
$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() );      // Отправить!

Данный код должен вывести что-то подобное:
Отправка SMS при помощи PHP

В вашем случае может быть придётся поиграться с настройками. Если вы планируете использовать Gmail, то эта информация будет вам полезна.

Вывод

Конечно, существуют и другие техники отправки текстовых сообщений. Этот способ подойдёт тем, кто будет отправлять не больше 1000 SMS в месяц. Альтернативы данной системы:
Использование SMS Gateway Provider;
Через Google можно много такого найти;
SMS gateway providers предоставляют специальные API, которые будут использованы для отправки SMS через их веб-сервера;
Можете подобрать специальный пакет, который будет удовлетворять ваши SMS потребности;
Вы можете арендовать короткие номера;
Использование GSM модема:
Это более дорогой вариант, т.к. придётся покупать специальный модем и заключать контракт с какой-то беспроводной сетью;
Вам так же придётся использовать Hayes-команды;
Использование прямого подключения к беспроводной сети, потребует от вас заключение контракта и целую кучу денег.

Я надеюсь у меня получилось осветить тему отправки SMS сообщений через PHP. Надеюсь урок вам понравился. Спасибо за внимание.









Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
BuMiS | 1 июня 2011 11:23
  • Группа: Посетители |
  • Комментарий: 1 (ссылка)

Круто =) спс 11

p.a.v.e.l. | 1 июня 2011 13:45
  • Группа: Посетители |
  • Комментарий: 2 (ссылка)

так для бел. операторов это работает?

P.S. сайт руселлер.ком

wiillow | 1 июня 2011 15:18
  • Группа: Посетители |
  • Комментарий: 3 (ссылка)

p.a.v.e.l., Не знаю... Не проверял...

DemGASS | 4 июня 2011 00:02
  • Группа: Посетители |
  • Комментарий: 4 (ссылка)

Кул вещ, знаю чела замутил,тер ему пиши смс бесплатно!

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.