SMTP delivery thread
- thread can deliver incoming messages over SMTP - this commit just contains the thread, subsequent commits will enable it
This commit is contained in:
parent
6895da7f65
commit
3d9c036129
104
src/class_smtpDeliver.py
Normal file
104
src/class_smtpDeliver.py
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
import smtplib
|
||||||
|
import sys
|
||||||
|
import threading
|
||||||
|
import urlparse
|
||||||
|
|
||||||
|
from debug import logger
|
||||||
|
from helper_threading import *
|
||||||
|
import shared
|
||||||
|
|
||||||
|
SMTPDOMAIN = "bmaddr.lan"
|
||||||
|
|
||||||
|
class smtpDeliver(threading.Thread, StoppableThread):
|
||||||
|
_instance = None
|
||||||
|
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
threading.Thread.__init__(self, name="smtpDeliver")
|
||||||
|
self.initStop()
|
||||||
|
|
||||||
|
def stopThread(self):
|
||||||
|
try:
|
||||||
|
shared.UISignallerQueue.put(("stopThread", "data"))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
super(smtpDeliver, self).stopThread()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get(cls):
|
||||||
|
if not cls._instance:
|
||||||
|
cls._instance = UISignaler()
|
||||||
|
return cls._instance
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
while shared.shutdown == 0:
|
||||||
|
command, data = shared.UISignalQueue.get()
|
||||||
|
if command == 'writeNewAddressToTable':
|
||||||
|
label, address, streamNumber = data
|
||||||
|
pass
|
||||||
|
elif command == 'updateStatusBar':
|
||||||
|
pass
|
||||||
|
elif command == 'updateSentItemStatusByToAddress':
|
||||||
|
toAddress, message = data
|
||||||
|
pass
|
||||||
|
elif command == 'updateSentItemStatusByAckdata':
|
||||||
|
ackData, message = data
|
||||||
|
pass
|
||||||
|
elif command == 'displayNewInboxMessage':
|
||||||
|
inventoryHash, toAddress, fromAddress, subject, body = data
|
||||||
|
dest = shared.config.get("bitmessagesettings", "smtpdeliver", None)
|
||||||
|
if not dest:
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
u = urlparse.urlparse(dest)
|
||||||
|
to = urlparse.parse_qs(u.query)['to']
|
||||||
|
client = smtplib.SMTP(u.hostname, u.port)
|
||||||
|
msg = MIMEText(body, 'plain', 'utf-8')
|
||||||
|
msg['Subject'] = subject
|
||||||
|
msg['From'] = fromAddress + '@' + SMTPDOMAIN
|
||||||
|
msg['To'] = toAddress + '@' + SMTPDOMAIN
|
||||||
|
client.ehlo()
|
||||||
|
client.starttls()
|
||||||
|
client.ehlo()
|
||||||
|
client.sendmail(msg['From'], [to], msg.as_string())
|
||||||
|
logger.info("Delivered via SMTP to %s through %s:%i ...", to, u.hostname, u.port)
|
||||||
|
client.quit()
|
||||||
|
except:
|
||||||
|
logger.error("smtp delivery error", exc_info=True)
|
||||||
|
elif command == 'displayNewSentMessage':
|
||||||
|
toAddress, fromLabel, fromAddress, subject, message, ackdata = data
|
||||||
|
pass
|
||||||
|
elif command == 'updateNetworkStatusTab':
|
||||||
|
pass
|
||||||
|
elif command == 'updateNumberOfMessagesProcessed':
|
||||||
|
pass
|
||||||
|
elif command == 'updateNumberOfPubkeysProcessed':
|
||||||
|
pass
|
||||||
|
elif command == 'updateNumberOfBroadcastsProcessed':
|
||||||
|
pass
|
||||||
|
elif command == 'setStatusIcon':
|
||||||
|
pass
|
||||||
|
elif command == 'changedInboxUnread':
|
||||||
|
pass
|
||||||
|
elif command == 'rerenderMessagelistFromLabels':
|
||||||
|
pass
|
||||||
|
elif command == 'rerenderMessagelistToLabels':
|
||||||
|
pass
|
||||||
|
elif command == 'rerenderAddressBook':
|
||||||
|
pass
|
||||||
|
elif command == 'rerenderSubscriptions':
|
||||||
|
pass
|
||||||
|
elif command == 'rerenderBlackWhiteList':
|
||||||
|
pass
|
||||||
|
elif command == 'removeInboxRowByMsgid':
|
||||||
|
pass
|
||||||
|
elif command == 'newVersionAvailable':
|
||||||
|
pass
|
||||||
|
elif command == 'alert':
|
||||||
|
title, text, exitAfterUserClicksOk = data
|
||||||
|
pass
|
||||||
|
elif command == 'stopThread':
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
sys.stderr.write(
|
||||||
|
'Command sent to smtpDeliver not recognized: %s\n' % command)
|
Loading…
Reference in New Issue
Block a user