# Copyright (C) 2020 by Maike # # SPDX-License-Identifier: 0BSD import email.parser import sys import re import requests from logging import getLogger from kibicara.model import Hood from kibicara.platforms.email.model import Email async def main(): logger = getLogger(__name__) # read mail from STDIN mailbytes = bytes(sys.stdin.read()) # parse plaintext to email.EmailMessage object myparser = email.parser.BytesParser() mail = myparser.parsebytes(mailbytes) # extract relevant data from mail for part in mail.walk(): try: text = part.get_body(('plain',)) if not text: text = re.sub(r'<[^>]*>', '', part.get_body(('html',))) except Exception: logger.info("No Body in this message part", exc_info=True) if not text: logger.error('No suitable message body') exit(1) # extract hood name from the envelope recipient address hood_name = mail.get("Envelope-to").split('@')[0].lower() hood = await Hood.objects.get(name=hood_name) email_row = await Email.objects.get(hood=hood) body = { 'text': text, 'author': mail.get_unixfrom(), 'secret': email_row.secret, } requests.post( 'http://localhost:8000/api/hoods/%d/email/messages/' % hood.id, json=body )