Adding some smtp/pop3 options. Adding SSL sockets

This commit is contained in:
Chuck 2013-07-03 22:30:06 +07:00
parent f482a4bc4c
commit 7694a54a15
4 changed files with 37 additions and 6 deletions

View File

@ -734,11 +734,15 @@ if __name__ == "__main__":
singleCleanerThread.daemon = True # close the main program even if there are threads left singleCleanerThread.daemon = True # close the main program even if there are threads left
singleCleanerThread.start() singleCleanerThread.start()
# Start the SMTP server # Start the SMTP and POP3 server if necessary
smtpServer = None
pop3Server = None
try:
if shared.config.get('bitmessagesettings', 'smtppop3enable') == 'true':
smtpServer = bitmessageSMTPServer() smtpServer = bitmessageSMTPServer()
# And the POP3 server...
pop3Server = bitmessagePOP3Server(debug=True) pop3Server = bitmessagePOP3Server(debug=True)
except:
pass
# And finally launch asyncore # And finally launch asyncore
asyncoreThread = asyncoreThread() asyncoreThread = asyncoreThread()

View File

@ -2,6 +2,7 @@ from collections import deque
import asyncore import asyncore
import shared import shared
import socket import socket
import ssl
import sys import sys
from addresses import * from addresses import *
@ -227,6 +228,12 @@ class bitmessagePOP3Server(asyncore.dispatcher):
self.debug = debug self.debug = debug
pop3port = shared.config.getint('bitmessagesettings', 'pop3port') pop3port = shared.config.getint('bitmessagesettings', 'pop3port')
self.ssl = shared.config.getboolean('bitmessagesettings', 'pop3ssl')
if self.ssl:
self.keyfile = shared.config.get('bitmessagesettings', 'keyfile')
self.certfile = shared.config.get('bitmessagesettings', 'certfile')
self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.bind(('127.0.0.1', pop3port)) self.bind(('127.0.0.1', pop3port))
self.listen(10) self.listen(10)
@ -237,6 +244,8 @@ class bitmessagePOP3Server(asyncore.dispatcher):
def handle_accept(self): def handle_accept(self):
sock, peer_address = self.accept() sock, peer_address = self.accept()
if self.ssl:
sock = ssl.wrap_socket(sock, server_side=True, certfile=self.certfile, keyfile=self.keyfile, ssl_version=ssl.PROTOCOL_SSLv23)
_ = bitmessagePOP3Connection(sock, peer_address, debug=self.debug) _ = bitmessagePOP3Connection(sock, peer_address, debug=self.debug)

View File

@ -1,6 +1,7 @@
from pyelliptic.openssl import OpenSSL from pyelliptic.openssl import OpenSSL
import shared import shared
import smtpd import smtpd
import ssl
import time import time
from addresses import * from addresses import *
@ -10,12 +11,26 @@ class bitmessageSMTPServer(smtpd.SMTPServer):
def __init__(self): def __init__(self):
# TODO - move to separate file/class # TODO - move to separate file/class
smtpport = shared.config.getint('bitmessagesettings', 'smtpport') smtpport = shared.config.getint('bitmessagesettings', 'smtpport')
smtpd.SMTPServer.__init__(self, ('127.0.0.1', smtpport), None)
self.ssl = shared.config.getboolean('bitmessagesettings', 'smtpssl')
if self.ssl:
self.keyfile = shared.config.get('bitmessagesettings', 'keyfile')
self.certfile = shared.config.get('bitmessagesettings', 'certfile')
smtpd.SMTPServer.__init__(self, ('127.0.0.1', smtpport), None)
shared.printLock.acquire() shared.printLock.acquire()
print "SMTP server started" print "SMTP server started"
shared.printLock.release() shared.printLock.release()
def handle_accept(self):
# Override SMTPServer's handle_accept so that we can start an SSL connection.
if not self.ssl:
return smtpd.SMTPServer.handle_accept(self)
sock, peer_address = self.accept()
sock = ssl.wrap_socket(sock, server_side=True, certfile=self.certfile, keyfile=self.keyfile, ssl_version=ssl.PROTOCOL_SSLv23)
channel = smtpd.SMTPChannel(self, sock, peer_address)
def process_message(self, peer, mailfrom, rcpttos, data): def process_message(self, peer, mailfrom, rcpttos, data):
#print("Peer", peer) #print("Peer", peer)
#print("Mail From", mailfrom) #print("Mail From", mailfrom)

View File

@ -28,8 +28,11 @@ def loadConfig():
shared.config.add_section('bitmessagesettings') shared.config.add_section('bitmessagesettings')
shared.config.set('bitmessagesettings', 'settingsversion', '6') shared.config.set('bitmessagesettings', 'settingsversion', '6')
shared.config.set('bitmessagesettings', 'port', '8444') shared.config.set('bitmessagesettings', 'port', '8444')
shared.config.set('bitmessagesettings', 'smtppop3enable', 'false')
shared.config.set('bitmessagesettings', 'smtpport', '10025') shared.config.set('bitmessagesettings', 'smtpport', '10025')
shared.config.set('bitmessagesettings', 'smtpssl', 'false')
shared.config.set('bitmessagesettings', 'pop3port', '10110') shared.config.set('bitmessagesettings', 'pop3port', '10110')
shared.config.set('bitmessagesettings', 'pop3ssl', 'false')
shared.config.set( shared.config.set(
'bitmessagesettings', 'timeformat', '%%a, %%d %%b %%Y %%I:%%M %%p') 'bitmessagesettings', 'timeformat', '%%a, %%d %%b %%Y %%I:%%M %%p')
shared.config.set('bitmessagesettings', 'blackwhitelist', 'black') shared.config.set('bitmessagesettings', 'blackwhitelist', 'black')