puppet/gammu/files/gammu-smsd-receive

54 lines
1.4 KiB
Python
Executable file

#!/usr/bin/env python
import codecs
import os
import re
import sys
import syslog
from ConfigParser import ConfigParser
from email.mime.text import MIMEText
from subprocess import Popen, PIPE
from time import strftime, strptime
def inboxpath():
c = ConfigParser()
c.read('/etc/gammu-smsdrc')
return c.get('smsd', 'InboxPath')
syslog.openlog('gammu-smsd-receive', syslog.LOG_PID, syslog.LOG_DAEMON)
if len(sys.argv) == 1:
syslog.syslog('Invalid arguments, no messages to process')
sys.exit(1)
idx = 1
for message in sys.argv[1:]:
m = re.match('^IN(\d+)_(\d+)_\d+_([^_]+)_\d\d\.(txt|bin)$', message)
if m is None:
syslog.syslog('Cannot parse message file %s' % message)
continue
date = strptime('%s %s' % (m.group(1), m.group(2)), '%Y%m%d %H%M%S')
number = m.group(3)
message = os.path.join(inboxpath(), message)
if not os.path.exists(message):
syslog.syslog('Cannot find message file %s' % message)
continue
text = codecs.open(message, 'r', encoding='utf-16').read()
mail = MIMEText(text.encode('utf-8'), 'plain', 'utf-8')
mail['Subject'] = 'SMS Received from %s' % number
mail['Date'] = strftime('%a, %d %b %Y %H:%M:%S %Z', date)
mail['From'] = number
mail['To'] = 'root'
p = Popen(["/usr/sbin/sendmail", "-t"], stdin=PIPE)
p.communicate(mail.as_string())
idx = idx + 1
os.unlink(message)
syslog.closelog()