Deleted and added smtp2chat python
This commit is contained in:
parent
2c4b0f6452
commit
69e642ed54
52
smtp2slack4qnap.py
Normal file
52
smtp2slack4qnap.py
Normal 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 ...')
|
||||||
Loading…
Reference in New Issue
Block a user