preparations for TLS
This commit is contained in:
parent
bf95d58527
commit
8b68e6dfa8
|
@ -40,6 +40,9 @@ _buildConfig() {
|
||||||
echo "MAILPORT=${MAILPORT:-25}"
|
echo "MAILPORT=${MAILPORT:-25}"
|
||||||
echo "DISCARD_UNKNOWN=${DISCARD_UNKNOWN:-true}"
|
echo "DISCARD_UNKNOWN=${DISCARD_UNKNOWN:-true}"
|
||||||
echo "ATTACHMENTS_MAX_SIZE=${ATTACHMENTS_MAX_SIZE:-0}"
|
echo "ATTACHMENTS_MAX_SIZE=${ATTACHMENTS_MAX_SIZE:-0}"
|
||||||
|
echo "MAILPORT_STARTTLS=${MAILPORT_STARTTLS:-0}"
|
||||||
|
echo "TLS_CERTIFICATE=${TLS_CERTIFICATE:-}"
|
||||||
|
echo "TLS_PRIVATE_KEY=${TLS_PRIVATE_KEY:-0}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "[DATETIME]"
|
echo "[DATETIME]"
|
||||||
echo "DATEFORMAT=${DATEFORMAT:-D.M.YYYY HH:mm}"
|
echo "DATEFORMAT=${DATEFORMAT:-D.M.YYYY HH:mm}"
|
||||||
|
|
|
@ -31,6 +31,12 @@ URL="http://localhost:8080"
|
||||||
; Port that the Mailserver will run on (default 25 but that needs root)
|
; Port that the Mailserver will run on (default 25 but that needs root)
|
||||||
MAILPORT=25
|
MAILPORT=25
|
||||||
|
|
||||||
|
; TLS settings
|
||||||
|
;
|
||||||
|
; MAILPORT_STARTTLS=587
|
||||||
|
; TLS_CERTIFICATE=/path/to/your/fullchain.pem
|
||||||
|
; TLS_PRIVATE_KEY=/path/to/your/privkey.pem
|
||||||
|
|
||||||
; true or false depending on if you only want to save emails to the above set domains
|
; true or false depending on if you only want to save emails to the above set domains
|
||||||
; this greatly reduces the amount of spam you will receive
|
; this greatly reduces the amount of spam you will receive
|
||||||
DISCARD_UNKNOWN=true
|
DISCARD_UNKNOWN=true
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import ssl
|
||||||
from aiosmtpd.controller import Controller
|
from aiosmtpd.controller import Controller
|
||||||
from email.parser import BytesParser
|
from email.parser import BytesParser
|
||||||
from email import policy
|
from email import policy
|
||||||
|
@ -21,6 +22,9 @@ ATTACHMENTS_MAX_SIZE = 0
|
||||||
DOMAINS = []
|
DOMAINS = []
|
||||||
LAST_CLEANUP = 0
|
LAST_CLEANUP = 0
|
||||||
URL = ""
|
URL = ""
|
||||||
|
MAILPORT_STARTTLS = 0
|
||||||
|
TLS_CERTIFICATE = ""
|
||||||
|
TLS_PRIVATE_KEY = ""
|
||||||
|
|
||||||
class CustomHandler:
|
class CustomHandler:
|
||||||
async def handle_DATA(self, server, session, envelope):
|
async def handle_DATA(self, server, session, envelope):
|
||||||
|
@ -123,6 +127,8 @@ class CustomHandler:
|
||||||
with open("../data/"+em+"/"+filenamebase+".json", "w") as outfile:
|
with open("../data/"+em+"/"+filenamebase+".json", "w") as outfile:
|
||||||
json.dump(savedata, outfile)
|
json.dump(savedata, outfile)
|
||||||
|
|
||||||
|
cleanup()
|
||||||
|
|
||||||
return '250 OK'
|
return '250 OK'
|
||||||
|
|
||||||
def handleAttachment(self, part):
|
def handleAttachment(self, part):
|
||||||
|
@ -173,8 +179,17 @@ def cleanup():
|
||||||
logger.info("Deleted file: " + filepath)
|
logger.info("Deleted file: " + filepath)
|
||||||
|
|
||||||
async def run(port):
|
async def run(port):
|
||||||
controller = Controller(CustomHandler(), hostname='0.0.0.0', port=port)
|
|
||||||
controller.start()
|
if MAILPORT_STARTTLS > 0 and TLS_CERTIFICATE != "" and TLS_PRIVATE_KEY != "":
|
||||||
|
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
|
||||||
|
context.load_cert_chain(TLS_CERTIFICATE, TLS_PRIVATE_KEY)
|
||||||
|
controller_starttls = Controller(CustomHandler(), hostname='0.0.0.0', port=MAILPORT_STARTTLS, tls_context=context)
|
||||||
|
controller_starttls.start()
|
||||||
|
|
||||||
|
controller_plaintext = Controller(CustomHandler(), hostname='0.0.0.0', port=port)
|
||||||
|
controller_plaintext.start()
|
||||||
|
|
||||||
|
|
||||||
logger.info("[i] Ready to receive Emails")
|
logger.info("[i] Ready to receive Emails")
|
||||||
logger.info("")
|
logger.info("")
|
||||||
|
|
||||||
|
@ -209,6 +224,13 @@ if __name__ == '__main__':
|
||||||
if("CLEANUP" in Config.sections() and "delete_older_than_days" in Config.options("CLEANUP")):
|
if("CLEANUP" in Config.sections() and "delete_older_than_days" in Config.options("CLEANUP")):
|
||||||
DELETE_OLDER_THAN_DAYS = (Config.get("CLEANUP", "DELETE_OLDER_THAN_DAYS").lower() == "true")
|
DELETE_OLDER_THAN_DAYS = (Config.get("CLEANUP", "DELETE_OLDER_THAN_DAYS").lower() == "true")
|
||||||
|
|
||||||
|
if("mailport_starttls" in Config.options("MAILSERVER")):
|
||||||
|
MAILPORT_STARTTLS = int(Config.get("MAILSERVER", "MAILPORT_STARTTLS"))
|
||||||
|
if("tls_certificate" in Config.options("MAILSERVER")):
|
||||||
|
TLS_CERTIFICATE = Config.get("MAILSERVER", "TLS_CERTIFICATE")
|
||||||
|
if("tls_private_key" in Config.options("MAILSERVER")):
|
||||||
|
TLS_PRIVATE_KEY = Config.get("MAILSERVER", "TLS_PRIVATE_KEY")
|
||||||
|
|
||||||
logger.info("[i] Starting Mailserver on port " + str(port))
|
logger.info("[i] Starting Mailserver on port " + str(port))
|
||||||
logger.info("[i] Discard unknown domains: " + str(DISCARD_UNKNOWN))
|
logger.info("[i] Discard unknown domains: " + str(DISCARD_UNKNOWN))
|
||||||
logger.info("[i] Max size of attachments: " + str(ATTACHMENTS_MAX_SIZE))
|
logger.info("[i] Max size of attachments: " + str(ATTACHMENTS_MAX_SIZE))
|
||||||
|
|
Loading…
Reference in a new issue