Отправка почты с помощью PHP-скрипта
Для отправки сообщений с сайта мы рекомендуем настроить вашу CMS на использование SMTP-сервера mail.nic.ru, порт 587 или 465 (SSL). При этом необходимо указать в качестве авторизационной информации данные одного из почтовых ящиков вашего домена. Создать такой ящик можно в разделе Почта панели управления хостингом.
Для некоторых CMS может потребоваться установка дополнительных модулей, например, WP Mail SMTP для WordPress.
При использовании функции php mail() возможна недоставка писем с сайта, если потребление памяти на вашем хостинге приближается к ограничениям тарифного плана. В случае необходимости использования функции php mail() , рекомендуем обратить внимание на статистику использования ресурсов в разделе Ресурсы панели управления и ознакомиться с рекомендациями по снижению потребления памяти на хостинге.
Как сделать свой сервер для приема, обработки и передачи смс
Доброго времени суток, уважаемое хабросообщество!
Недавно в универе мне была поставлена задача создать сервис смс-рассылки уведомлений старостами (деканатом и прочими) своим группам.
Основные требования к сервису были следующими:
— Сервис должен быть многопользовательским (старост более 1) с возможностью одновременной обработки запросов
— Не должен быть привязан к online сервисам рассылки (дабы не утекли базы пользователей)
— Должен быть достаточно легким и мобильным
— Максимально малозатратным
— Должен использовать только открытое программное обеспечение
— Должен обеспечивать отправку уведомлений, даже если у отправляющей стороны нет доступа к Интернету и/или компьютеру. (т.е. не только отправлять, но и принимать входящие смс сообщения от старост + определять от кого конкретно они поступили и делать рассылку по их группам)
Как удалось это реализовать — смотрите под катом.
Список ингредиентов.
Для того, чтобы приступить к организации сервиса, нам будет нужно собрать все необходимые железки.
- Компьютером у меня будет выступать нетбук ASUS EEEPC 701
- Мобильный телефон, используемый для отправки смс — Nokia 3110
- USB bluetooth адаптер — для связи компьютера и телефона
- Зарядки для мобильника и нетбука для постоянной поддержки рабочего состояния
- Подключение к Интернету. По LAN или Wi-Fi.
- Симкарта с тарифом МТС «Супер МТС». У них все смски по РО на любого ОПСОСа по 10 копеек.
- Зарегистрированный хостинг и какое-нибудь доменное имя.
В принципе, на этом можно и ограничиться. Но для более комфортной работы я бы посоветовал еще:
- Монитор
- Беспроводную клавиатуру
- Дополнительное охлаждения для нетбука (ибо при работе 24/7 собственного маленького кулера ему будет явно не достаточно)
Охлаждение.
Что касается охлаждения — сделать его совершенно элементарно. Возьмите старый 80 миллиметровый кулер, зачистите красный и черный проводки, идущие от него. Затем отрежьте половину от ненужного USB кабеля. Также зачистите на нем красный и черный провод. Смотайте провода от кулера и от USB вместе, заизолируйте и ваше охлаждение готово. Желательно разместить кулер под нетбуком на пластилиновых ножках, чтобы он громко не резонировал.
Собственно, вот как это выглядит:

Что касается зачистки проводов — я люблю сначала опалить их концы на керосиновой горелке, а потом ножом легко счистить остатки. Керосинку тоже покупать не стоит — ее можно сделать из обычной 60 Ваттной лампочки Ильича. Пробиваете верхушку цоколя, заливаете туда керосин, вставляете кусок старой тряпки вместо фитиля и готово. Вот как это выглядит:

Подготавливаем железо к работе.
OS
В виде операционной системы для нетбука я выбрал EasyPeasy — система для нетбуков, основанная на ядре Linux и модифицированная для слабых компьютеров. Скачать ее, установить на флешку, а затем на нетбук можно тут.
Bluetooth
После того, как операционная система заняла свое место, подключаем bluetooth-адаптер в свободный USB порт. Система должна распознать его автоматически. Включаем Nokia и спариваем телефон и компьютер.
Установка gnokii
Нужно установить gnokii. Я уже и раньше ссылался на эту статью по его установке на Линукс. Думаю, разберетесь.
После установки наберите в консоли что-то вроде echo «Привет, друг!» | gnokii —sendsms ‘+7номер_вашего_друга’ и проверьте, отправилась ли смска.
Подготовка хостинга
Возможно, Вам подойдет какой-либо другой способ организации многопользовательской работы, но я использовал возможности Joomla ACL (уровней доступа). Как это настроить — очень подробно описано в этой статье. Я лишь хочу заметить, что на выходе у Вас должен получиться сайт, где каждый из пользователей (те, кто будет отправлять смски) будет иметь свой личный кабинет, попасть в который он сможет введя номер своего мобильного телефона (в качестве логина, в формате 79XX XXX XX XX) и пятизначный цифровой код в качестве пароля. К примеру, как на сайте vamsms.ru
Подготавливаем программное обеспечение к работе.
Внимание! Все программки я писал сам. Можете использовать их как вам хочется, только дайте обратную связь, если найдете какой-либо серьезный косяк.
Итак, наша задача состоит в том, чтобы научить наш сервер общаться с удаленным сайтом, собирать с него заявки на отправку и отправлять сообщения. Кроме того, сервер должен уметь принимать входящие сообщения (на Nokia, с которой смски отправляются), осознавать, что они отправлены старостами и также ставить в очередь на рассылку по той группе, к которой конкретная староста принадлежит. Плюс, все это нужно синхронизировать. Ну и вести логи, конечно.
Организация MySQL БД
Для начала необходимо сделать БД, относящуюся к хостингу, на котором у Вы организовали сайт. Я назвал свою БД — pXXXX_sender (под XXX скрываются цифры моего пользователя на хостинге)
Внутри этой БД нужно создать 3 таблицы. У меня они имеют следующую структуру:
starosti (идентификация и ареалы действий для старост)
— number
— group
— course
— facultet
— pass
telephones (все телефоны в базе)
— number
— groups
— course
— facultet
on_demand (тут хранятся сообщения на отправку)
— message
— group
— course
— id_this_trans
— date_log
Отлично, на этом с базами данных все.
Организация shell-скрипта на нетбуке (сервере).
Теперь нужно сделать так, чтобы нетбук каждые 10 минут проверял:
1) Поступили ли новые сообщения с сайта? Если да, то отправляю их нужным группам.
2) Поступили новые входящие смски? Если да, то от старост ли они? Если нет, то просто удаляю их, если да, то определяю, за какую группу отвечает староста и делаю рассылку сообщения по той группе.
Привожу листинг shell-скрипта:
#!/bin/bash a=1 #заглушка для бесконечного цикла test_trigger=`cat cache_test_trig.txt` #исходное значение триггера при старте программы while [ $a == 1 ] #начало бесконечного цикла do if ping -c1 ya.ru &> /dev/null then test_trigger_now=$(wget http://site.ru/trigger.txt --quiet -O -) # получаем значение триггера if [ $test_trigger_now -eq $test_trigger ]; then #совпадает ли текущий триггер с новым? echo "Nothing new :(" #если совпадает, уход в сон до след цикла ############################### ######### Mobile extention ############################### aa=1 #переменная для поддержания цикла #count=1 #счетчик для выбора смс из памяти по 1 while [ $aa == 1 ] # получение смсок из памяти по 1 do sms_test=$(gnokii --getsms IN 1 1) #считали 1 сообщение в цикле (1 1,2 2 и т.д.) echo $sms_test>mobile_temp.txt #поместили ответ системы в файл answer_test=$(grep -c Date/time: mobile_temp.txt) #ищем в ответе ключевое слово, присущее сообщению(Date/time:) if [ "$answer_test" != "1" ]; then #если ключевое слово не найдено, память закончилась, вышла ошибка aa=2 # прерываем цикл echo "messages over! Stop" elif [ "$answer_test" == "1" ]; then #если ключевое слово найдено, echo "Here is 1 message" #let count=$count+1 #работа со счетчиком выборки из памяти #Теперь в переменной sms_test находится сообщение вида '1. Inbox Message (Unread) Date/time: 07/02/2013 15:33:16 +0400 Sender: +7904xxxxxx Msg Center: Text: 51235 Мое сообщение.' server_send=$(wget http://site.ru/serv_mobile.php?text="$sms_test" -O /dev/null) #передаем сообщение на сервер для записи/незаписи в бд sleep 1 gnokii --deletesms IN 1 1 #очищает память телефона 1 сообщение fi sleep 3 done ############################### ######### Mobile extention ############################### sleep 500 else #если не совпадает, запуск программы смс-отправки echo "i need to do something!" let different=$test_trigger_now-$test_trigger #(стало-было), сколько нового #echo $different #разницу выдает правильно get_sender=$(wget http://site.ru/trigger.php?diff=$different --quiet -O -) # в скрипт на реме передается количество новых записей (сколько папок создавать) #echo $get_sender # скрипт на реме воспринимает переменную different нормально echo $get_sender #возвращает ОК от рема sleep 3 #дадим рему время очухаться #Start SMS-sending n=0 while [ $n -lt $different ] # пока n < different do let n=$n+1 #. SENDING. echo "send files from send$n folder" #место для запуска gnokii mess_for_gnok=$(wget http://site.ru/send$n/message.txt --quiet -O -) #скачиваем сообщение numb_for_gnok=$(wget http://site.ru/send$n/numbers.txt) #скачиваем номера cat numbers.txt | while read line do inp=$line echo "$mess_for_gnok" | gnokii --sendsms $inp echo $line echo $mess_for_gnok sleep 2 done rm numbers.txt #delete temporary files sleep 1 #. SENDING. done terminator=$(wget http://site.ru/terminate.php?kill=$different --quiet -O -) # delete all temperal folders in root #echo "i kill all files" test_trigger=$test_trigger_now #задание выполнено, поднимаемся и ждем новых изменений в trigger.txt echo $test_trigger>cache_test_trig.txt sleep 10 #засыпает после всех действий fi else echo "Here is no Internet. Find it!" sleep 500 fi done
Кроме того, в папке со скриптом нужно создать файл cache_test_trig.txt со значением 1 (и в таблице on_demand сделать первую запись какую-нибудь)
Организация php-скриптов на удаленном хостинге.
В личном кабинете пользователя в joomla должна быть форма следующего содержания:
function isNotMax(e)< e = e || window.event;var target = e.target || e.srcElement;var code=e.keyCode?e.keyCode:(e.which?e.which:e.charCode)switch(code)return target.value.length Форма смс-отправки.
Очевидно, данные из формы передаются в файл, лежащий в корневой директории хостинга handler.php
Вот его листинг:
Ваше сообщение НЕ отправлено!
Текст уведомления не указан. Вернитесь назад и заполните поле.
