-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsms.py
executable file
·111 lines (101 loc) · 3.1 KB
/
sms.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/python3
import sys
import logging
import smtplib
import tempfile
from email.message import Message
from email.utils import getaddresses,parseaddr
from suds.client import Client
from configparser import RawConfigParser
logging.basicConfig(level=logging.INFO)
config = RawConfigParser()
config.read('/etc/ups/sms.conf')
PHONE = dict(config.items('phone'))
EMAIL = dict(config.items('email'))
USERID = config.get('main','userid')
FROM = config.get('main','from')
class SMSError(Exception): pass
class SMS(object):
client = Client('http://smsgateway.ca/SendSMS.asmx?WSDL')
def __init__(self,key):
self.key = key
self.remaining = None
def sendMsg(self,cell,msg,ref=''):
res = self.client.service.SendMessageWithReferenceExtended(
cell, msg, self.key, ref)
# MessagesRemaining = "8"
# MessageID = "2171881"
# QueuedSuccessfully = "True"
# ErrorMessage = ""
self.remaining = int(res.MessagesRemaining)
if not res.QueuedSuccessfully:
raise SMSError(res.ErrorMessage)
return int(res.MessageID)
def getSent(self,cnt=10):
res = self.client.service.GetSentMessages(self.key, cnt)
# CreditsDeducted = "1"
# Reference = ""
# Sent = "True"
# QueueDate = "2009-06-19 16:03:50.267000"
# MessageID = "2123455"
# SendDate = "2009-06-19 16:03:56.830000"
# Status = "Success"
# Body = "..."
# CellNumber = "5711234567"
return res.SMSOutgoingMessage
def getRecv(self,cnt=10):
res = self.client.service.GetIncomingMessages(self.key, cnt)
if not res: return res
# OutgoingMessageID = "2123456"
# Reference = ""
# MessageNumber = "116297"
# PhoneNumber = "5711234567"
# Message = "Ok. I love you."
# ReceivedDate = "2009-06-19 16:06:25.243000"
return res.SMSIncomingMessage
def sendEmail(to,subj,txt):
msg = Message()
msg.set_type('text/plain')
msg.add_header('Subject',subj)
msg.add_header('From',FROM)
msg.add_header('To',to)
realname,fromaddr = parseaddr(FROM)
msg.set_payload(txt)
with open('/var/log/email.log','at') as fp:
fp.write(msg.as_string(True)+'\n')
toaddrs = [addr for name,addr in getaddresses([msg['to']])]
server = smtplib.SMTP('localhost')
#server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, msg.as_string())
server.quit()
if __name__ == '__main__':
sms = SMS(USERID)
if len(sys.argv) > 1:
msg = ' '.join(sys.stdin.read().split())
name = sys.argv[1]
if name in PHONE:
cell = PHONE[name]
else:
cell = name
if len(msg) > 160:
print("Message too long (%d)." % len(msg))
else:
res = sms.sendMsg(cell, msg)
print("id %d, %d units remaining"%(res,sms.remaining))
if name in EMAIL:
sendEmail(EMAIL[name],'SMS %d'%res,msg)
else:
for m in sms.getRecv():
print("%8s %8s %8s %10s %s" % (
m.OutgoingMessageID,
m.Reference,
m.MessageNumber,
m.PhoneNumber,
m.ReceivedDate ))
print("> ",m.Message)
for m in sms.getSent():
print("%1s %8s %1s%1s %8s %10s %s" % (
m.CreditsDeducted, m.Reference, m.Sent, m.Status[:1],
m.MessageID, m.CellNumber, m.SendDate
))
print("> ",m.Body)