#!/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()