# Copyright (C) 2020 by Maike # # SPDX-License-Identifier: 0BSD import email.parser import sys import re import requests from logging import getLogger from kibicara.platforms.email.model import Email from kibicara.model import Hood import argparse def main(): logger = getLogger(__name__) # the MDA passes the recipient address as command line argument parser = argparse.ArgumentParser() parser.add_argument("recipient_address") args = parser.parse_args() # 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',))) if not text: logger.error('No suitable message body') exit(0) except Exception: logger.info("No Body in this message part", exc_info=True) exit(0) # extract hood name from the envelope recipient address hood_name = args.recipient_address.split('@')[0] hood = await Hood.objects.get(name=hood_name) body = { 'text': text, 'author': mail.get_unixfrom(), 'secret': Email.secret, } requests.post('http://localhost/api/' + hood.id + '/email/messages/', data=body)