Deleted and added smtp2chat python

This commit is contained in:
Jonathan Ervine 2020-10-27 20:14:22 +08:00
parent 2c4b0f6452
commit 69e642ed54

52
smtp2slack4qnap.py Normal file
View File

@ -0,0 +1,52 @@
#!/usr/bin/env python3
#
# Compact SMTP to HTTP Gateway
# -> targeting Slack for QNAP-NAS notifications
#
# generate self-signed cert (better than nothing):
# openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 3650 -nodes -subj '/CN=localhost'
import ssl
import asyncio
from aiosmtpd.controller import Controller
from aiosmtpd.smtp import SMTP as Server, syntax
from aiosmtpd.handlers import Debugging
from hashlib import sha256
from base64 import b64encode, b64decode
import requests
import email
import json
# requires STARTTLS
# again, overkill for running locally, but mandatory for remote
class MyController(Controller):
def factory(self):
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain('cert.pem', 'key.pem')
return MyServer(self.handler, tls_context=context, require_starttls=True)
def email2text(data):
body = email.message_from_bytes(data).get_payload()
h = html2text.HTML2Text()
h.ignore_tables = True
return re.sub(r'\n\s*\n', '\n\n', h.handle(body))
class CustomHandler:
async def handle_DATA(self, server, session, envelope):
if not server.authenticated:
return '500 Unauthenticated. Could not process your message'
mail_from = envelope.mail_from
data = envelope.content
text = email2text(data)
# tuned for slack, but can be anything else
requests.post(WEBHOOK_URL, data={'payload': json.dumps({'username': mail_from, 'text': text})})
print("[+] Alert sent: {}".format(text.encode()))
return '250 OK'
if __name__ == '__main__':
os.chdir(os.path.dirname(os.path.abspath(__file__)))
handler = CustomHandler()
controller = MyController(handler, hostname=LHOST, port=LPORT)
controller.start()
input('SMTP server has started ...')