Отправляет email-рассылки с помощью сервиса Sendsay

Скрипты от SiteOFF.net

  Все выпуски  

Скрипты от SiteOFF.net 004


Информационный Канал Subscribe.Ru

Добрый день Уважаемые подписчики!

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

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

 

> Отправка SMS с помощью PHP

Введение

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


Так как я пользуюсь услугами оператора Мегафон, то и скрипт будет отправлять SMS на любой номер сети Мегафон.
Как вы, наверно, знаете, отправить SMS можно вполне беспрепятственно с сайта оператора. Ознакомившись с формой отправки, выясняется, что для отправики SMS необходимо будет

  1. Выбрать префикс.
  2. Ввести номер телефона.
  3. Ввести сообщение.
  4. Выбрать по необходимости время отправки.

Главное, что нужно будет учитывать при написании сообщения (таковы условия отправки SMS с сайта Мегафона), это то, что длинна сообщения не должна превышать 110 символов (латиница), остальную часть сообщения Мегафон забирает под рекламу.

В чем же будет заключаться работа нашего скрипта? Так как SMS по идее должен отправлять пользователь из реального браузера, то наша задача будет заключаться в имитировании захода пользователя на страницу и последующей имитации отправки SMS пользователем. Как мы это сделаем? Мы сгенерируем точно такой же запрос скрипту отправки SMS (на http://www.megafonmoscow.ru/misc/sms2), что и генерирует браузер реального пользователя.

Форма запроса

Запрос создается на основе данных формы отправки SMS на сайте Мегафона.

Вот она:

Номер телефона:  
Сообщение 
  Осталось символов
  Использовать транслитерацию


Отложить отправку

:       

(Вы можете указать дату и время отправки сообщения. В случае использования данной функции отправка сообщения произойдет в указанное время)

Вот ее код:

<form action=sms2 name="sendsms" method="post">

  <select name="prefix">
    <option value="7926">7 926</option>
    <option value="7095">7 095</option>
  </select>

  <input name="addr" type="text">
  <input name="mlength" value="(максимум 110 символов):">
  <textarea name="message" style="width: 100%;"></textarea>
  <input name="messlen" value="110">
  <input name="transliterate" type="checkbox" checked>
  <input name="send" value="Отправить" type="submit">
  <input name="send_after_flag" value="on" type="checkbox">

  <select name="send_hour">
    <option value="-1">--</option>
    <option value="0">00</option>
    <option value="1">01</option>
    ...
    <option value="23">23</option>
  </select>

  <select name="send_minute">
    <option value="-1">--</option>
    <option value="0">00</option>
    <option value="1">01</option>
    ...
    <option value="59">59</option>
  </select>

  <select name="send_day">
    <option value="-1">--</option>
    <option value="1">01</option>
    <option value="2">02</option>
    ...
    <option value="31">31</option>
  </select>

  <select name="send_month">
    <option value="-1">--</option>
    <option value="1">Января</option>
    <option value="2">Февраля</option>
    ...
    <option value="12">Декабря</option>
  </select>

  <select name="send_year">
    <option value="-1">----</option>
    <option value="2003">2003</option>
    <option value="2004">2004</option>
  </select>

</form>

Анализ кода формы

Анализуруя тег <form>, находим, что при нажатии на кнопку "Отправить", форма посылает запрос скрипту "sms2", который находится там же, что и страница с формой, то есть абсолютный путь к этому скрипту будет такой: /misc/sms2, и, соответственно, url: http://www.megafonmoscow.ru/misc/sms2 (напоминаю, что сама форма отправки SMS находится здесь /misc/sms, url: http://www.megafonmoscow.ru/misc/sms, так как в action написано "sms2" без слешей и других символов, то файл sms2 находится там же, где и файл sms с формой для отправки)

Фома использует метод POST для отправки данных (method="post").

В форме присутствуют следующие поля (см исходный код):
prefix - префикс номера. Так как это список (<select>), то prefix может принимать только одно из двух значений:7095 и 7926 (значения тегов <option>).
addr - ваш телефонный номер (6 знаков).
mlength - Поле, в котором написано "(максимум 110 символов):", соответственно принимает только это значение ("(максимум 110 символов):").
message - само сообщение, длинна которого по условию должна быть не более 110 символов.
messlen - в этом поле нам любезно пишется сколько осталось символов (с помощью javascript). Значение поля зависит исключительно от размера поля message и равно 110-размер message в символах. То есть еcлu message="Hello!", то messlen=110-6=104. Это будет необходимо учитывать в будущем при отправке данных.

Следующие параметры не так важны, но упомянуть о них стоит.
transliterate - флажок, отвечающий за транслитерацию. По умолчанию значение его равно "on" (не смотря на то, что в теге написано checked, значие "on" этот флажок принимает после отправки данных формы)
send_after_flag - флажок, который надо будет отметить, еcлu вы вдруг захотите отложить отправку, по умолчанию не отмечен и, соответственно, равен пустой строке.

Следующие параметры имеют смысл только при отмеченном send_after_flag
send_hour - час отправления в формате hh (00, 01 ? 22), по умолчанию параметр не установлен и равен -1 (минус один).
send_minute - минута отправления в формате mm, по умолчанию равен -1.
send_day - число месяца отправления в формате dd, по умолчанию -1.
send_month - месяц отправления по-русски в родительном падеже (Января, Августа), по умолчанию -1.
send_year - год отправления в формате yyyy (2004), по умолчанию -1.

Структура запроса

Браузер пользователя при отправке данных формы, генерирует запрос для скрипта sms2.
Запрос состоит из заголовка и тела запроса. Тело запроса - это просто структурированные данные формы (как их структурировать написано ниже). Давайте лучше по-подробней разберемся с заголовком запроса.
Заголовок должен быть исключительно таким:

POST /misc/sms2 HTTP/1.1.
Host: www.megafonmoscow.ru
Referer: http://www.megafonmoscow.ru/misc/sms
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Content-Type: application/x-www-form-urlencoded
Accept: */*
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Content-Length: XXX

(Content-Length: XXX, где XXX - размер тела запроса в символах.)

В этом месте мы немного хитрим. Ведь наш скрипт будет выполняться на сервере, а это значит, что такие параметры, как Referer (откуда мы пришли) и User-Agent (Браузер), при стандартном запросе с сервера, будут отсутствовать по вполне логичным причинам (запрос идет с сервера, а не от браузера). Таким образом, нам приходится подделывать заголовок запроса, что бы все выглядело так, как будто сообщение отправляет реальный пользователь с вполне, кстати говоря, реальным IP (IP сервера, откуда будет запускаться скрипт).

Формируем скрипт.

Продвигаемся еще глубже. Формируем тело скрипта. Листинг его приведен в самом конце страницы, а здесь и далее скрипт формируется последовательно с комментариями.

1. Формируем данные формы:

// Переменные
$prefix='7926';
$addr='0000000'; // телефон
$mlength='(максимум 110 символов):';
$message='Hi';
$messlen=110-strlen($message); // Зависит от длинны сообщения. В Мегафоне ораничение на 110 символов
$transliterate='on';
$send_after_flag='';
$send_hour='-1';
$send_minute='-1';
$send_day='-1';
$send_month='-1';
$send_year='-1';

SMS, содержащее одно слово "Hi", отправляем на телефон +79260000000. Имена переменныъх совпадают с именами тегов input. Значения всех стоят по умолчанию, кроме трех: prefix, addr, message и messlen

2. Формируем тело запроса:

// Тело запроса
$POSTData=
"prefix=".urlencode($prefix)."&".
"addr=".urlencode($addr)."&".
"mlength=".urlencode($mlength)."&".
"message=".urlencode($message)."&".
"messlen=".urlencode($messlen)."&".
"transliterate=".urlencode($transliterate)."&".
"send=".urlencode('Отправить')."&".
"send_hour=".urlencode($send_hour)."&".
"send_minute=".urlencode($send_minute)."&".
"send_day=".urlencode($send_day)."&".
"send_month=".urlencode($send_month)."&".
"send_year=".urlencode($send_year);

Тело запроса при помощи метода POST формируются также как при методе GET. А именно структура тела запроса такая: параметр_1=значение_параметра_1&параметр_2=значение_параметра_2&?&параметр_N=значение_параметра_N;
Так же формируем тело запроса и мы.
Функция urlencode встроена в php и используется для перекодирования всех значений параметров в формат тела запроса (пробелы заменяются на "+", буквы на последовательности символа "%" и двух чисел в шестнадцатиричном формате).

3. Теперь сформируем весь запрос, состоящий из заголовка и тела.

// Запрос с заголовком и телом

$len=strlen($POSTData); // Размер в символах тела запроса
$nn="\r\n"; // возврат каретки и символ новой строки

$request=
"POST /misc/sms2 HTTP/1.1".$nn.
"Host: www.megafonmoscow.ru".$nn.
"Referer: http://www.megafonmoscow.ru/misc/sms".$nn.
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)".$nn.
"Content-Type: application/x-www-form-urlencoded".$nn.
"Accept: */*".$nn.
"Accept-Encoding: gzip, deflate".$nn.
"Connection: Keep-Alive".$nn.
"Content-Length: $len".$nn.$nn.
"$POSTData";

Главное ничего не забыть и соблюсти все основополагающие принципы построения запроса. Каждый параметр заголовка запроса должен начинаться с новой строки. Последовательность символов возврата каретки (\r) и новой строки (\n) заменила переменная $nn, объявленная выше. Параметр Content-Length формируется в зависимости от длинны тела запроса $len ($len=strlen($POSTData). И не забудьте отделить заголовок запроса от тела пустой строкой! Не соблюдение, по крайней мере, одного из этих пунктов, может привести к неудовлетворительным результатам.

4. Теперь осталось только присоединиться к хосту и отправить наш запрос.
Вот как это осуществляется:

// Открываем сокет и отсылаем запрос скрипту
$socket='www.megafonmoscow.ru';

if ($fp = fsockopen($socket, 80, &$errno, &$errstr, 30)) {
fputs($fp,$request);
fclose($fp);
}
else {
print "Невозможно присоединиться, по причине:$errstr ($errno)<br>\n"; exit;
}

Мы присоединяемся к сокету 'www.megafonmoscow.ru' через стандартный 80 порт для http запросов. И работаем с сокетом как с файлом. Функцией fputs отправляем наш запрос. Потом закрываем соединение.

Все, скрипт собран, его листинг приведен ниже, и на этом предлагаю закончить. На последок хочу сказать, что многие операторы связи стараются защитить себя от подобных скриптов, ставя на их пути различные преграды. Удачный пример: Beeline, что бы отправить SMS, надо, помимо прочего, еще и вписать в специальное поле секретный код (последовательность цифр), указанный на картинке.

Полный листинг php скрипта отправки SMS

// Переменные
$prefix='7926';
$addr='0000000'; // телефон
$mlength='(максимум 110 символов):';
$message='Hi';
$messlen=110-strlen($message);// Зависит от длинны сообщения В мегафоне ораничение на 110 символов
$transliterate='on';
$send_after_flag='';
$send_hour='-1';
$send_minute='-1';
$send_day='-1';
$send_month='-1';
$send_year='-1';

// Тело запроса
$POSTData=
"prefix=".urlencode($prefix)."&".
"addr=".urlencode($addr)."&".
"mlength=".urlencode($mlength)."&".
"message=".urlencode($message)."&".
"messlen=".urlencode($messlen)."&".
"transliterate=".urlencode($transliterate)."&".
"send=".urlencode('Отправить')."&".
"send_hour=".urlencode($send_hour)."&".
"send_minute=".urlencode($send_minute)."&".
"send_day=".urlencode($send_day)."&".
"send_month=".urlencode($send_month)."&".
"send_year=".urlencode($send_year);

$len=strlen($POSTData); // Размер в символах тела запроса
$nn="\r\n"; // возврат каретки и символ новой строки

// Запрос с заголовком и телом
$request=
"POST /misc/sms2 HTTP/1.1".$nn.
"Host: www.megafonmoscow.ru".$nn.
"Referer: http://www.megafonmoscow.ru/misc/sms".$nn.
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)".$nn.
"Content-Type: application/x-www-form-urlencoded".$nn.
"Accept: */*".$nn.
"Accept-Encoding: gzip, deflate".$nn.
"Connection: Keep-Alive".$nn.
"Content-Length: $len".$nn.$nn.
"$POSTData";

// Открываем сокет и отсылаем запрос скрипту

$socket='www.megafonmoscow.ru';

if ($fp = fsockopen($socket, 80, &$errno, &$errstr, 30)) {
fputs($fp,$request);
echo fgets($fp,1024);
fclose($fp);
}
else {
print "Невозможно присоединиться, по причине:$errstr ($errno)<br>\n"; exit;
}

 

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

Если у Вас есть интересные материалы, милости просим на наш e-mail      

 Мы рады Всем Вашим сообщениям, единственное условие, при написании писем просьба  указывать тему письма - "Вопрос по рассылке".

 У нас работает анти-спам, и письма с подозрительными темами просто удаляются.

 

Напоминаем, что на нашем сайте - siteoff.net открылись новые разделы ( каталог скриптов, каталог аватаров для форумов, и конечно же каталог ссылок на Ваши ресурсы), до завершения нашей рекламной акции по раздаче визитов активной раскрутки остается пол месяца, спешите, можно и опоздать:).

 

 Если у Вас есть вопросы, которые требуют пояснений, или у Вас есть скрипт, который Вы не можете разобрать, установить или не получается использовать, присылайте в архиве нам на e-mail, и мы постараемся Вам ответить, помочь или подсказать.

     Ваши материалы принимаются на E-mail: kain@vipmail.ru после модерации сообщения переносятся в ближайшую рассылку. Примерно 1 раз в месяц будут публиковаться письма с вопросами читателей, и ответы на них.

    Материалы рассылки доступны на сайте www.siteoff.net , также некоторые вопросы можно задать в на форуме сайта www.forum.siteoff.net .

Мы надеемся на долгое и благотворное сотрудничество, и желаем процветания Вашим проектам.

С уважением www.siteoff.net

 

 


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: inet.webbuild.siteoffnet
Отписаться

В избранное