В случае чего человек отправляет письмо на определенный почтовый ящик например sms@host.org,
после чего определенным людям приходит sms.
Подключаем модем, через COM-порт. FreeBSD остальное сделает за нас
Код: Выделить всё
#uname -a
FreeBSD 7.0-RELEASE
Код: Выделить всё
# ls /dev/
Код: Выделить всё
cuad0
cuad0.init
cuad0.lock
Находим нужный софт:
Код: Выделить всё
# cd /usr/ports
/usr/ports# make search name=scmxx
Port: gscmxx-0.4.1_4
Path: /usr/ports/comms/gscmxx
Info: A graphical frontend for scmxx
Maint: svmohr@rm6.net
B-deps: [CUT]
WWW: http://gscmxx.sourceforge.net/
Port: scmxx-0.9.0_1
Path: /usr/ports/comms/scmxx
Info: Data exchange utility for Siemens mobile phones
Maint: janos.mohacsi@bsd.hu
B-deps: gettext-0.17_1 gmake-3.81_3 libiconv-1.11_1
R-deps: gettext-0.17_1 libiconv-1.11_1
WWW: http://www.hendrik-sattler.de/scmxx/
Код: Выделить всё
/usr/ports# cd /usr/ports/comms/scmxx
Код: Выделить всё
/usr/ports/comms/scmxx# make install clean
/usr/ports/comms/scmxx# cd /usr/local
/usr/local# mkdir sms
/usr/local# cd sms
/usr/local/sms# touch sms.sh
/usr/local/sms# touch smsget.sh
/usr/local/sms# touch smssend.sh
/usr/local/sms# touch sms.txt
Содержимое самих скриптов.
sms.sh:
Код: Выделить всё
#!/bin/sh
# Запуск скрипта получения только сообщения
# из файла почты и сохранения его в отдельный файл
/usr/local/sms/smsget.sh /var/mail/sms > /usr/local/sms/sms.txt
# Если файл не имеет нулевого размера, запускаем скрипт отправки SMS
if [ -s /usr/local/sms/sms.txt ]; then
/usr/local/sms/smssend.sh
# Обнуляем и почту и текст, который уже был отправлен
/dev/null/> /usr/local/sms/sms.txt
/dev/null/> /var/mail/sms
fi
# Нужно реализовать коды обработки,
# на тот случай если модем "откажется" отправлять сообщение
Код: Выделить всё
#!/bin/sh
# Удаление заголовков из электронных писем и новостей,
# т.е. до первой пустой строки
if [ $# -eq 0 ]; then
# ==> Если входной аргумент не задан (файл), то выводить результат на stdin.
sed -e '1,/^$/d' -e '/^[ ]*$/d'
# --> Удалить пустые строки и все строки предшествующие им
else
# ==> Если аргумент командной строки задан,
# то использовать его как имя файла.
for i do
sed -e '1,/^$/d' -e '/^[ ]*$/d' $i
done
fi
Код: Выделить всё
#!/bin/sh
# Name
/usr/local/bin/scmxx --device /dev/cuad0 --baud 9600 \
--reset --system-charset koi8-r --unicode --send --sms --direct \
--number=+7xxxxxxxxx --send /usr/local/sms/sms.txt
Код: Выделить всё
--send /usr/local/sms/sms.txt
Код: Выделить всё
--text "`cat /usr/local/sms/sms.txt`"
Добавляем или исправляем /etc/rc.conf:
Код: Выделить всё
sendmail_enable="YES"
Смотрим имя машины:
Код: Выделить всё
# hostname
ns2.host.org
Код: Выделить всё
ns2.host.org IP_smsgate
Код: Выделить всё
*/5 * * * * root /usr/local/sms/sms.sh
Впринципе всё.
Да, пользователя добавляем.
Код: Выделить всё
# adduser
Username: sms
Full name: sms
Uid (Leave empty for default):
Login group [sms]:
Login group is sms. Invite sms into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]:
Home directory [/home/sms]: /dev/null
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username : sms
Password : *****
Full Name : sms
Uid : 1002
Class :
Groups : sms
Home : /dev/null
Shell : /bin/sh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (sms) to the user database.
Add another user? (yes/no): no
Goodbye!
(c) Observer.