add pure tls smptp
This commit is contained in:
parent
98b4ea7c95
commit
2d83267b55
@ -10,7 +10,7 @@ import sys
|
||||
from argparse import ArgumentParser
|
||||
from pathlib import Path
|
||||
|
||||
from .smtp import create_smtp_server
|
||||
from .smtp import create_smtp_server_starttls, create_smtp_server_tls
|
||||
from .pop3 import create_pop_server
|
||||
|
||||
|
||||
@ -33,6 +33,8 @@ def parse_args():
|
||||
# Hardcoded args
|
||||
args.host = '0.0.0.0'
|
||||
args.smtp_port = 25
|
||||
args.smtp_port_tls = 465
|
||||
args.smtp_port_submission = 587
|
||||
args.pop_port = 995
|
||||
args.smtputf8 = True
|
||||
args.debug = True
|
||||
@ -66,9 +68,15 @@ def drop_privileges():
|
||||
async def a_main(args, tls_context):
|
||||
pop_server = await create_pop_server(
|
||||
args.mail_dir_path, port=args.pop_port, host=args.host, context=tls_context, password_hash=args.password_hash)
|
||||
smtp_server = await create_smtp_server(args.mail_dir_path, port=args.smtp_port, host=args.host, context=tls_context)
|
||||
smtp_server_starttls = await create_smtp_server_starttls(
|
||||
args.mail_dir_path, port=args.smtp_port, host=args.host, context=tls_context)
|
||||
smtp_server_tls = await create_smtp_server_tls(
|
||||
args.mail_dir_path, port=args.smtp_port_tls, host=args.host, context=tls_context)
|
||||
drop_privileges()
|
||||
await asyncio.gather(pop_server.serve_forever(), smtp_server.serve_forever())
|
||||
await asyncio.gather(
|
||||
pop_server.serve_forever(),
|
||||
smtp_server_starttls.serve_forever(),
|
||||
smtp_server_tls.serve_forever())
|
||||
|
||||
|
||||
def main():
|
||||
|
@ -31,7 +31,7 @@ class MailboxCRLF(Mailbox):
|
||||
self.mailbox = MaildirCRLF(mail_dir)
|
||||
|
||||
|
||||
def protocol_factory(dirpath: Path, context: ssl.SSLContext = None):
|
||||
def protocol_factory_starttls(dirpath: Path, context: ssl.SSLContext = None):
|
||||
logging.info("Got smtp client cb")
|
||||
try:
|
||||
handler = MailboxCRLF(dirpath)
|
||||
@ -46,14 +46,31 @@ def protocol_factory(dirpath: Path, context: ssl.SSLContext = None):
|
||||
return smtp
|
||||
|
||||
|
||||
async def create_smtp_server(dirpath: Path, port: int, host="", context: ssl.SSLContext = None):
|
||||
def protocol_factory(dirpath: Path):
|
||||
logging.info("Got smtp client cb")
|
||||
try:
|
||||
handler = MailboxCRLF(dirpath)
|
||||
smtp = SMTP(handler=handler, data_size_limit=DATA_SIZE_DEFAULT, enable_SMTPUTF8=True)
|
||||
except Exception as e:
|
||||
logging.error("Something went wrong", e)
|
||||
raise
|
||||
return smtp
|
||||
|
||||
|
||||
async def create_smtp_server_starttls(dirpath: Path, port: int, host="", context: ssl.SSLContext = None):
|
||||
loop = asyncio.get_event_loop()
|
||||
return await loop.create_server(partial(protocol_factory, dirpath, context),
|
||||
return await loop.create_server(partial(protocol_factory_starttls, dirpath, context),
|
||||
host=host, port=port, start_serving=False)
|
||||
|
||||
|
||||
async def create_smtp_server_tls(dirpath: Path, port: int, host="", context: ssl.SSLContext = None):
|
||||
loop = asyncio.get_event_loop()
|
||||
return await loop.create_server(partial(protocol_factory, dirpath),
|
||||
host=host, port=port, ssl=context, start_serving=False)
|
||||
|
||||
|
||||
async def a_main(*args, **kwargs):
|
||||
server = await create_smtp_server(*args, **kwargs)
|
||||
server = await create_smtp_server_starttls(*args, **kwargs)
|
||||
await server.serve_forever()
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user