Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Как отправлять текстовые сообщения с помощью PHP

by
Difficulty:BeginnerLength:LongLanguages:

Russian (Pусский) translation by Yuri Yuriev (you can also view the original English article)

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

В этом уроке мы рассмотрим основы отправки текстовых сообщений с помощью PHP.


Обзор

Отправка текстового сообщения (SMS) на самом деле довольно проста.

Ниже приведена упрощённая схема передачи сообщения из веб-приложения на беспроводное устройство.

Мы разобьём это - по одному за раз:

  • Сообщение составлено с использованием веб-приложения, которое хранится и выполняется на HTTP-сервере, а затем отправляется через Интернет («облако») в качестве сообщения электронной почты.
  • Письмо получено Шлюзом службы коротких сообщений (SMS Gateway), который преобразует сообщение из сообщения электронной почты в SMS-сообщение.
  • Затем SMS-сообщение передается в центр обслуживания коротких сообщений (SMSC), который является сервером, направляющим данные на конкретные мобильные устройства.
  • Сообщение, наконец, передаётся по беспроводной сети получателю.

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


Email на SMS

Чтобы отправить SMS по электронной почте, обычно требуется только две вещи:

  • Номер телефона или уникальный идентификатор мобильного устройства, с которым вы хотите связаться.
  • И доменное имя беспроводной сети (многие могут быть найдены в this списке email на SMS-адреса)

Для большинства носителей можно придерживаться следующего соглашения:

PhoneNumber - это номер телефона мобильного устройства, на которое отправляется сообщение, а domainName.com - адрес для SMS Gateway сети.

Чтобы отправить текст Mr. Example, вы можете просто добавить 3855550168@vtext.com в любой почтовый клиент, набрать сообщение и нажать отправить. Это отправит текстовое сообщение на номер телефона +1 (385) 555-0168 по беспроводной сети Verizon.

Например, я отправлю текстовое сообщение самому себе с помощью Gmail.

Когда мой телефон получит сообщение, оно должно выглядеть так:

Довольно круто!


PHP's mail функция

Давайте сделаем еще один шаг. Используя SMS Gateway, мы можем отправить текстовое сообщение по электронной почте, используя функцию mail PHP. Функция mail имеет следующую запись:

Можете почитать ещё here.

  • $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 manual, «каждая строка должна разделяться LF (\n). Строки не должны быть длиннее 70 символов. "

В ранней версии функциональности мы могли бы написать следующий PHP-код:


Тест-драйв

Проведём тест с PHP, чтобы убедиться, что всё настроено правильно, и что mail функция фактически отправит текстовое сообщение. Используя следующий код, мы можем запустить:

Когда мой телефон получит сообщение, оно выглядит так:

Если вы получаете сообщение об ошибке, см. раздел troubleshooting.

Как вы видно на изображении, сообщение показывает, что это Gmail. Это происходит потому, что я передаю все исходящие сообщения с моего локального сервера через эту службу. К сожалению, на момент написания этой статьи мне не удалось изменить From, чтобы отразить альтернативный адрес. Кажется, что заголовки электронной почты удалены и заменены заголовками, подготовленными SMS gateway. Если кто-нибудь знает об обходном пути, пожалуйста, оставьте комментарий и пусть узнают все!


Добавление удобства

Разметка

Избегая основ, давайте рассмотрим эту идею и обернём вокруг неё пользовательский интерфейс. Сначала мы создадим простую форму:

Стиль

Далее мы брызнем CSS:

Это даст нам следующий простой вид:


Скрипт

Самой важной частью этого является скрипт PHP. Мы напишем этот фрагмент кода:

  • Сначала скрипт проверяет, была ли предоставлена форма.
  • Если да, он проверяет, были ли отправлены переменные phoneNumber, carrier и sms Message. Это полезно в случае, когда на странице может быть несколько форм.
  • Если phoneNumber, carrier и smsMessage доступны, а phoneNumber и carrier не пусты, можно послать сообщение.
  • Аргумент сообщения в функции mail должен состоять из 70 символов в каждой строке. Мы можем разрезать сообщение на 70 кусков символов, используя функцию wordwrap.
  • PhoneNumber и carrier объединены, а затем сообщение отправляется с использованием функции mail.
  • Если данные отсутствуют или не могут быть проверены, скрипт просто возвращает Не вся информация была отправлена.
  • Наконец, mail возвращает логическое значение, указывающее, было оно успешным или нет. Значение хранится в $ result, если я захочу убедиться, что сообщение действительно отправлено.

Примечание: метод mail только уведомляет, было ли отправлено сообщение. Это не даёт возможности проверить, было ли сообщение успешно принято сервером-получателем или почтовым ящиком.


Окончательный код 


Исправление проблем

Ошибка локального домена

Чтобы использовать mail функцию, у вас должен быть почтовый сервер. Если вы запускаете это на web host, то, вероятно, всё в порядке. Но если вы не уверены, я рекомендую поговорить с администратором. Это относится и к персональным компьютерам. Но если вы получите такие ошибки, как ..

... вам придется установить и настроить почтовый сервер. Это выходит за рамки данного урока. Однако, если вы работаете на своей локальной машине, переход на нечто вроде XAMPP может решить эту проблему. Или попробуйте установить Mercury Mail вместе с WAMP, MAMP или LAMP (или SAMP или OAMP и пр.) систему (много разных «AMP»).

PHPMailer

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

Его использование так же просто, как включение класса в ваш скрипт.

Это должно распечатывать что-то вроде:

Может потребоваться немного больше, чтобы настроить соединение в зависимости от вашей ситуации. Если вы планируете использовать Gmail, Google предоставил information on connecting.


Заключение

Существует множество методов для выполнения задачи отправки SMS через веб-приложение. Этот метод действительно предназначен для низкоуровневых сообщений (скорее всего, менее 1000 текстовых сообщений в месяц), а разработчики хотят оставить ноги сухими, не размахивая наличными. Другие варианты включают:

  • Использование SMS Gateway Provider

    • Выполнение Google search даст много вариантов.
    • Большинство провайдеров SMS gateway включают API для отправки сообщений через веб-приложение.
    • Обычно вы можете подписаться на сервис по разумной цене, предполагая, что вы планируете отправлять не менее 1000 SMS-сообщений в месяц.
    • Можно арендовать short code number.
  • Использование GSM modem

    • Это может быть дорогостоящим и медленным способом, поскольку вам нужно купить модем и заключить контракт с беспроводной сетью
    • Ещё можно использовать AT (Hayes) command set.
  • Используйте прямое подключение к беспроводной сети, для чего потребуются переговоры и много денег.

Этот урок никоим образом не является всесторонним обзором отправки текстовых сообщений с PHP; но это должно заставить вас начать! Надеюсь, этот урок вас заинтересовал. Большое вам спасибо за чтение!

Advertisement
Advertisement
Advertisement
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.