Вынес с отдельную ветку, чтобы не потерялось.
Добавлено:
- отсылка больших смс путем дробления на части и посылки каждой отдельно. Большие смс с русским текстом тоже обрабатываются;
- убран мусор, добавляемый mail.ru в конец сообщения;
- список адресов электронной почты перебирается по кругу. Ищутся те, с которых можно послать;
- создана веб-страница для отправки смс с помощью веб-интерфейса (тестировал с в связке lighttpd);
- для ускорения работы скрипта время возможной отправки смс сохраняется в файл;
- присутствует отложенная отправка;
Установка
1) Скопируйте содержимое архива sms в какую-нибудь директорию.
2) Установите Python. Для этого в шелле выполните:
Code:
ipkg update
ipkg install python3
3) Сделайте скрипты send.py, sendtime.py, smscron.py, smscron.sh исполняемыми.
Code:
chmod +x send.py
chmod +x sendtime.py
chmod +x smscron.py
chmod +x smscron.sh
4) [Если нужна отложенная отправка]
Отредактируйте smscron.sh (задайте в переменной BASEPATH путь до smscron.py без слеша в конце).
Добавьте в cron (у меня в файл /opt/etc/crontabs/admin) вызов smscron.sh:
Code:
0 * * * * /opt/share/scripts/sms/smscron.sh
Если вы распаковали архив в /opt/share/scripts/sms/
В начало crontab-файла добавьте
Так проверка на отправку будет производится с каждым началом часа.
Настройка
1) Список email-ов и паролей задается в файле store.py.
Для отправки больших смс, если задано мало email-ов, но с них еще можно отправить, скрипт висит в памяти и отправляет каждую минуту. Поэтому лучше задать штук 5-10 чтобы не было ожидания.
2) Там же в значение переменной log_filename задайте файл для лога и проверьте права на доступ к нему.
Использование
Отправка смс:
Code:
./send.py 7916xxxxxxx message
Отложенная отправка смс:
Code:
./sendtime.py 8 23 7916xxxxxxx message
Первый параметр - час, когда смс может приходить; второй - когда уже смс приходить не может.
Установка веб-интерфейса (сервер lighttpd):
1) Распакуйте содержимое архива webInterface в корень веб сервера (у меня /opt/share/www).
2) В файле sendFromWeb.py задайте переменной sender_path свой путь до директории с файлом send.py.
3) В файле конфига lighttpd (/opt/etc/lighttpd/lighttpd-ssl.conf - у меня используется ssl. Или /opt/etc/lighttpd/lighttpd.conf - если без ssl) необходимо секцию cgi модифицировать следующим образом:
Code:
#### CGI module
cgi.assign = ( ".pl" => "/opt/bin/perl",
".py" => "/opt/bin/python3",
".cgi" => "/bin/sh" )
По желанию можно настроить аутентификацию в том же конфиге. Вот пример моей
Code:
auth.require = ( "/" =>
(
"method" => "digest",
"realm" => "realm_can_access_to_root",
"require" => "user=user_can_access_to_root"
)
)
$HTTP["url"] =~ "^/rtorrent"{
auth.require = ( "/rtorrent" =>
(
"method" => "digest",
"realm" => "rtorrent",
"require" => "valid-user"
)
)
}
$HTTP["url"] =~ "^/sms"{
auth.require = ( "/sms" =>
(
"method" => "digest",
"realm" => "sms",
"require" => "valid-user"
)
)
}
Про аутентификацию подробнее.
В веб-интерфейсе можно не задавать время отправки, тогда смс придет сразу же.
Не забудьте установить локаль, если не установлена (лучше в /etc/profile).
Code:
export LANG='ru_RU.UTF-8'
Внимание! Если вы только что зарегали ящик на mail.ru, то чтобы залогиниться через Mail.Ru Agent или этот скрипт, нужно отправить письмо кому-нибудь.
UPD (от 30.05.2010): Теперь не придется каждый раз править sender.py. E-mail'ы и пароли к ним вынесены в отдельный файл.
UPD (от 14.05.2011): В питоне 3.2 сломали logging со строкой формата '%(asctime)-18s'. Поэтому тем, что поставил python-3.2 и кому в консоль сыпятся ошибки вида: KeyError: 'asctime' на 34 строке файла sender.py замените
Code:
format = '%(asctime)-18s %(levelname)-13s %(message)s',
на
Code:
format = '%(asctime)s %(levelname)-13s %(message)s',
НЕ ТРОГАЯ отступы.
UPD (от 23.07.2011): В питоне 3.2.1-1 logging починили, не нужно править руками sender.py.