Отправка SMS при помощи PHP

94KONG

Проверенные
Сообщения
196
Реакции
87
Баллы
11,040
В наше время SMS широко применяются в веб-технологиях. Их используют для того, чтобы сообщить клиентам о свежих новостях, событиях и продуктах. Именно поэтому растёт рост разработчиков, которые интересуются данным инструментом. В этом уроке мы рассмотрим фундаментальные основы отправки текстовых сообщений при помощи PHP.
Вступление
Для того, чтобы отправить SMS через PHP не нужно много трудиться. Ниже вы можете увидеть схему, которая показывает весь процесс отправки текстового сообщения с веб-приложения на беспроводное устройство.
1.png
Начинаем разбор:

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

Email в SMS
Для того, чтобы превратить email сообщение в SMS, вам понадобятся 2 вещи:

  • Номер телефона или ID телефонного устройства на которое вы будете отправлять сообщение;
  • Домен беспроводной сети (их можно найти )
Оно может выглядеть приблизительно так: [email protected]

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

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

К примеру, я пошлю сообщение самому себе через Gmail:
2.png
Когда я получу сообщение оно будет выглядеть следующим образом:
3.png
Функция mail()
Давайте двигаться дальше. Для отправки SMS сообщений мы можем использовать всеми известную функцию mail(), которая имеет следующую сигнатуру:

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

вы можете узнать о ней больше.

  • $to это получатель текстового сообщения. Валидные данные:
  • $subject это тема сообщения, которая в общих чертах описывает содержание письма. Для SMS она не требуется;
  • $message это само сообщение, которое будет доставлено. Согласно PHP документации каждая строка сообщения должна заканчиваться символом (\n) и не должна быть длиннее 70 символов;
Переделаем наш пример:
Код:
1
mail( '[email protected]', '', 'Testing' );
Тестируем
Давайте же проведём тест и убедимся, что через функцию mail() можно отправлять SMS сообщения. Используем следующий код:
PHP:
<?php
2
var_dump( mail( '##########@vtext.com', '', 'This was sent with PHP.' ) ); // bool(true)
3
?>
Сообщение, которое пришло на мой мобильный телефон выглядит так
4.png
Как вы видите, сообщение пришло через систему Gmail. Это произошло из-за того, что я выставил соответствующие настройки для отправки сообщений с локальной машины.

Добавляем Юзабилити
Структура

Теперь я хочу предложить вам создать небольшую форму для отправки SMS с сайта. Она имеет следующую структуру:
HTML:
<!DOCTYPE html>
02
<head>
03
   <meta charset="utf-8" />
04
  </head>
05
  <body>
06
   <div id="container">
07
    <h1>Sending SMS with PHP</h1>
08
    <form action="" method="post">
09
     <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>
Стиль
Давайте немного её оформим:
PHP:
body {
02
margin: 0;
03
padding: 3em 0;
04
color: #fff;
05
background: #0080d2;
06
font-family: Georgia, Times New Roman, serif;
07
}
08
09
#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
}
Вот что у нас получилось:
5.png
Пишем скрипт
Это сама сложная часть данного урока. Прошу внимания:
PHP:
<?php
02
if ( isset( $_REQUEST ) && !empty( $_REQUEST ) ) {
03
if (
04
isset( $_REQUEST['phoneNumber'], $_REQUEST['carrier'], $_REQUEST['smsMessage'] ) &&
05
  !empty( $_REQUEST['phoneNumber'] ) &&
06
  !empty( $_REQUEST['carrier'] )
07
) {
08
  $message = wordwrap( $_REQUEST['smsMessage'], 70 );
09
  $to = $_REQUEST['phoneNumber'] . '@' . $_REQUEST['carrier'];
10
  $result = @mail( $to, '', $message );
11
  print 'Сообщение было отослано ' . $to;
12
} else {
13
  print 'Заполните все поля.';
14
}
15
}
16
?>
  • В первую очередь скрипт проверяет была ли отправлена информация;
  • Если да, то он проверяет наличие phoneNumber, carrier и smsMessage. Это полезно когда на странице больше чем одна форма;
  • Если phoneNumber, carrier, smsMessage доступны, а phoneNumber и carrier не пусты, то мы можем отправлять сообщение;
  • В сообщении не должны быть строки, превышающие 70 символов. Для разбиения сообщения на строки мы можем использовать функцию wordwrap;
  • phoneNumber и carrier конкатенируются для того, чтобы сформировать адрес получателя;
  • Если данные не прошли валидацию, то скрипт выдаст сообщение “Заполните все поля”;
  • В конце концов функция mail вернёт нам истину или ложь. Результат мы помещаем в переменную $result для дальнейшей проверки.
Запомните, что mail() возвращает результат отправки сообщения и всё. Дошло письмо или нет - остаётся неизвестным.
Финальный код
PHP:
<?php
02
03
if ( isset( $_REQUEST ) && !empty( $_REQUEST ) ) {
04
if (
05
isset( $_REQUEST['phoneNumber'], $_REQUEST['carrier'], $_REQUEST['smsMessage'] ) &&
06
  !empty( $_REQUEST['phoneNumber'] ) &&
07
  !empty( $_REQUEST['carrier'] )
08
) {
09
  $message = wordwrap( $_REQUEST['smsMessage'], 70 );
10
  $to = $_REQUEST['phoneNumber'] . '@' . $_REQUEST['carrier'];
11
  $result = @mail( $to, '', $message );
12
  print 'Сообщение было отослано ' . $to;
13
} else {
14
  print 'Заполните все поля.';
15
}
16
}
17
18
?>
19
<!DOCTYPE html>
20
<head>
21
   <meta charset="utf-8" />
22
   <style>
23
    body {
24
     margin: 0;
25
     padding: 3em 0;
26
     color: #fff;
27
     background: #0080d2;
28
     font-family: Georgia, Times New Roman, serif;
29
    }
30
31
    #container {
32
     width: 600px;
33
     background: #fff;
34
     color: #555;
35
     border: 3px solid #ccc;
36
     -webkit-border-radius: 10px;
37
     -moz-border-radius: 10px;
38
     -ms-border-radius: 10px;
39
     border-radius: 10px;
40
     border-top: 3px solid #ddd;
41
     padding: 1em 2em;
42
     margin: 0 auto;
43
     -webkit-box-shadow: 3px 7px 5px #000;
44
     -moz-box-shadow: 3px 7px 5px #000;
45
     -ms-box-shadow: 3px 7px 5px #000;
46
     box-shadow: 3px 7px 5px #000;
47
    }
48
49
    ul {
50
     list-style: none;
51
     padding: 0;
52
    }
53
54
    ul > li {
55
     padding: 0.12em 1em
56
    }
57
58
    label {
59
     display: block;
60
     float: left;
61
     width: 130px;
62
    }
63
64
    input, textarea {
65
     font-family: Georgia, Serif;
66
    }
67
   </style>
68
  </head>
69
  <body>
70
   <div id="container">
71
    <h1>Sending SMS with PHP</h1>
72
    <form action="" method="post">
73
     <ul>
74
      <li>
75
       <label for="phoneNumber">Phone Number</label>
76
       <input type="text" name="phoneNumber" id="phoneNumber" placeholder="3855550168" /></li>
77
      <li>
78
      <label for="carrier">Carrier</label>
79
       <input type="text" name="carrier" id="carrier" />
80
      </li>
81
      <li>
82
       <label for="smsMessage">Message</label>
83
       <textarea name="smsMessage" id="smsMessage" cols="45" rows="15"></textarea>
84
      </li>
85
     <li><input type="submit" name="sendMessage" id="sendMessage" value="Send Message" /></li>
86
    </ul>
87
   </form>
88
  </div>
89
</body>
90
</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 , то вы с лёгкостью исправите ситуацию. Если же у вас , , LAMP, SAMP или OAMP, попробуйте установить

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

Данный код надо просто заинклудить в ваш скрипт:

PHP:
require 'class.phpmailer.php';
02
03
// Создаём объект класса
04
$mail = new PHPMailer();
05
06
// Настройка SMTP
07
$mail->IsSMTP();                // Настройка SMTP подключения
08
$mail->SMTPDebug  = 2;          // Вывод отладочной информации
09
$mail->SMTPAuth = true;         // Подключение к SMTP требует авторизацию
10
$mail->SMTPSecure = "tls";      // Подключаемся, используя TLS
11
$mail->Host = "smtp.gmail.com";
12
$mail->Port = 587;
13
$mail->Encoding = '7bit';   
14
15
// Авторизация
16
$mail->Username   = "[email protected]"; // Логин
17
$mail->Password   = "password"; // Пароль
18
19
// Проверка
20
$mail->Subject = "Testing";     // Тема
21
$mail->Body = "Testing";        // Сообщение
22
23
// Отправка
24
$mail->AddAddress( "##########@vtext.com" ); // Получатель
25
var_dump( $mail->send() );      // Отправить!
Данный код должен вывести что-то подобное:

6.png


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

Конечно, существуют и другие техники отправки текстовых сообщений. Этот способ подойдёт тем, кто будет отправлять не больше 1000 SMS в месяц. Альтернативы данной системы:

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

Данный урок подготовлен для вас командой сайта
Источник урока:
 
Последнее редактирование:
Ребята я не пробовал,не было возможности ,если будет время у каво выровняйте код,ато не посвящонные запутаютса,за рание спасиба!
 
Интересная тема! кто может её реализовать напишите в личьку!!
 
А как это может быть полезно для форума?
 
А как это может быть полезно для форума?
Анти-бот система)

А как это может быть полезно для форума?
Ну или для перевода в группу.
Зарегистрировался ты, попал в группу Пользователь, не можешь принять участие в конкурсе.
Подтвердил номер телефона, тебя перевели в группу Верифицированный, теперь можешь принять участие
 
А можно узнать этот способ рассылки бесплатный? И если да кто может подскажет как это реализовать коротким но быстрым методом, естественно за оплату с моей стороны!!
 
А можно узнать этот способ рассылки бесплатный? И если да кто может подскажет как это реализовать коротким но быстрым методом, естественно за оплату с моей стороны!!
Бесплатного способа нет.
 
Есть Telesign, там есть API, можно отправлять смски/отправлять голосовые сообщения, прайс посмотрите на сайте.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу