[root@mng ~]#wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm [root@mng ~]#rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt [root@mng ~]#rpm -K rpmforge-release-0.5.2-2.el6.rf.*.rpm [root@mng ~]#yum install usb_modeswitch [root@mng ~]#yum install minicom [root@mng ~]#yum install smstools usbtools [root@mng ~]#minicom -s
Serial-port /dev/ttyUSB0
Welcome to minicom 2.3
OPTIONS: I18n
Compiled on Aug 19 2010, 05:50:19.
Port /dev/ttyUSB0
Press CTRL-A Z for help on special keys
AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0
OK
Проверка уровня сигнала
AT+CSQ
+CSQ: 15,99
Пробум отправку смс
AT+CMGF=1
AT+CMGS="+7965XXXXXXX"
> TEST
><CTRL+Z>
+CMGS: 6
OK
<Ctrl>+A Q Для выхода с терминала миником
[root@mng ~]# wget http://smstools3.kekekasvi.com/packages/smstools3-3.1.15.tar.gz [root@mng smstools3]# make -s install Installing binary program files /usr/local/bin/smsd Installing some scripts /usr/local/bin/sendsms /usr/local/bin/sms2html /usr/local/bin/sms2unicode /usr/local/bin/unicode2sms Installing config file Skipped /etc/smsd.conf, file already exists Creating minimum spool directories Skipped /var/spool, directory already exists Creating directory /var/spool/sms Creating directory /var/spool/sms/incoming Creating directory /var/spool/sms/outgoing Creating directory /var/spool/sms/checked Installing start-script /etc/init.d/sms3 Example script files are not installed automatically. Please dont forget to edit /etc/smsd.conf.
[root@mng smstools3]# cat /etc/smsd.conf devices = GSM1 incoming=/var/spool/sms/incoming outgoing=/var/spool/sms/outgoing checked=/var/spool/sms/checked sent=/var/spool/sms/sent logfile = /var/log/smsd/smsd.log loglevel = 7 #debug = 7 user = sms smart_logging = yes [GSM1] device = /dev/ttyUSB0 [root@mng smstools3]# mkdir /var/spool/sms/sent [root@mng smstools3]# /etc/init.d/sms3 start Starting SMS Daemon: smsd. [root@mng smstools3]# ps ax | grep sms 12005 ? Ss 0:00 /usr/local/bin/smsd -n MAINPROCESS -p/var/run/smsd.pid -i/var/run/smsd.working -l/var/log/smsd.log 12007 ? S 0:00 /usr/local/bin/smsd -n GSM1_______ -p/var/run/smsd.pid -i/var/run/smsd.working -l/var/log/smsd.log 12050 pts/1 S+ 0:00 grep sms [root@mng smstools3]# sendsms "7965XXXXXXX" "TESTER" -- Text: TESTER To: 7965XXXXXXX [root@mng smstools3]# tail -f /var/log/smsd.log 2013-06-25 11:21:59,7, GSM1: Command is sent, waiting for the answer 2013-06-25 11:21:59,7, GSM1: <- OK 2013-06-25 11:22:00,7, GSM1: -> AT+CMGS=42 2013-06-25 11:22:00,7, GSM1: Command is sent, waiting for the answer 2013-06-25 11:22:00,7, GSM1: <- > 2013-06-25 11:22:00,7, GSM1: -> 0011000B919756107494F80008FF1C004600750063006B00200079006F00750020043D0438043304350440 2013-06-25 11:22:00,7, GSM1: Command is sent, waiting for the answer 2013-06-25 11:22:04,7, GSM1: <- +CMGS: 7 OK 2013-06-25 11:22:04,5, GSM1: SMS sent, Message_id: 7, To: 7965XXXXXX, sending time 8 sec. 2013-06-25 11:22:04,6, GSM1: Moved file /var/spool/sms/checked/send_d704Fu to /var/spool/sms/sent/send_d704Fu
Шлюз email2sms
#!/usr/bin/perl
# Copyright(C) Victor Vislobokov, 2011
# Under GNU GPL 2 License
use DB_File;
use Net::POP3;
# имя и пароль для доступа к почтовому ящику
$username = "username";
$password = "password";
# POP3 сервер
$server = "pop.yandex.ru";
# номер сотового куда отправлять SMS
$num = 'XXXXXXXXXX';
# База данных для хранения идентификаторов писем
$db_file = "/var/tmp/sms/id.db";
# Файл журнала для протоколирования действий
$logfile = "/var/tmp/sms/emailtosms.log";
$pop = Net::POP3->new($server, Timeout => 60);
$rc = $pop->login($username, $password);
if ($rc > 0) {
# Открываем БД сохранённых сообщений
$DB = tie(%hash_id, "DB_File", $db_file);
# Получаем список сообщений
$msgnums = $pop->list;
foreach my $msgnum (keys %$msgnums) {
# Получаем уникальный ID сообщения
$uid = $pop->uidl($msgnum);
# Отмечаем это сообщение в хеше текущих в данной сессии
$msgs{$uid} = 1;
# Проверяем не было ли уже обработано данное сообщение
# Если обработано, идём дальше
if (defined $hash_id{$uid}) {
writeLog($logfile, "$uid already processed");
next;
}
# Если нет, обрабатываем
$hash_id{$uid} = 1;
$msg = $pop->get($msgnum);
foreach $line (@$msg) {
if (index($line, "Subject: ") == 0) {
$sms = substr($line, 9, 50);
chomp($sms);
$stamp = getCurrentDateTime();
writeLog($logfile, "SMS '$sms' sended");
system("/usr/local/bin/sendsms \"$num\" \"$stamp $sms\"");
}
}
# $pop->delete($msgnum);
}
} elsif ($rc == 0) {
writeLog($logfile, "No messages in mailbox");
} else {
writeLog($logfile, "Login failed");
}
$pop->quit;
# Удаляем из базы старые ID
foreach $uid (keys %hash_id) {
# Если ID из базы есть в текущей сессии, оставляем
next if (defined $msgs{$uid});
DB_File::DELETE($DB, $uid);
writeLog($logfile, "$uid was been deleted");
}
untie(%hash_id);
# ----------------------------------------------------------------------------
# Получение текущей даты и времени
# ----------------------------------------------------------------------------
sub getCurrentDateTime {
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());
$mon++;
$year=$year-100+2000;
return(sprintf("%.4d-%.2d-%.2d %.2d:%.2d:%.2d", $year, $mon, $mday, $hour, $min, $sec));
}
# ----------------------------------------------------------------------------
# Запись в лог
# ----------------------------------------------------------------------------
sub writeLog {
my ($logfile, $msg) = @_;
if (!defined $logfile) {
$logfile = "/dev/null";
}
my ($datetime, $fd, $rc);
$datetime = getCurrentDateTime();
$rc = open($fd, ">>$logfile");
if (!defined $rc) {
if ($main::config{'DEBUG'} > 0) {
# При невозможности вывода в файл, выводим на стандартный ввод
print "$msg\n";
}
} else {
print($fd "$datetime ");
print($fd "$msg");
print($fd "\n");
close($fd);
}
}
[root@mng /]# chmod 755 email2sms.pl [root@mng sms]# crontab -l */3 * * * * /email2sms.pl