diff --git a/bin/process-dsn b/bin/process-dsn deleted file mode 100755 index 3b09a7e9d4e85fcebc7f94cf49658711f1f5ecaa..0000000000000000000000000000000000000000 --- a/bin/process-dsn +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python3 - -# XXX: Work in progress :XXX - -import email.message -import email.parser -import email.policy -import sys - -# import mo.db as db -# import mo.email -# import mo.users -import mo.util - -mo.util.init_standalone() - - -class DSN: - msg: email.message.EmailMessage - message_id: str - parse_status: str - dsn_action: str - dsn_status: str - - def __init__(self): - parser = email.parser.Parser(policy=email.policy.default) - self.msg = parser.parse(sys.stdin) - self.message_id = (self.msg['Message-Id'] or '?').strip() - self.dsn_action = '?' - self.dsn_status = '?' - self.parse_status = self.parse_dsn() - - def parse_dsn(self) -> str: - if self.msg.get_content_type() != 'multipart/report': - return 'unexpected content-type' - - if not self.msg.is_multipart(): - return 'not multipart' - - report_type = self.msg['Content-type'].params.get('report-type', '?') - if report_type != 'delivery-status': - return 'unknown report-type' - - if len(self.msg.get_payload()) < 2: - return 'too few parts' - - part2 = self.msg.get_payload(1) - if part2.get_content_type() != 'message/delivery-status': - return 'unexpected part 2 type' - - dsn = part2.get_payload() - if len(dsn) < 2: - return 'DSN too short' - - # main = dsn[0] - - per_addr = dsn[1] - self.dsn_action = per_addr['Action'] - self.dsn_status = per_addr['Status'] - - if self.dsn_action != 'failed': - return 'not failed' - - print(self.msg.get_payload(2).get_content_type()) - - return 'ok' - - -dsn = DSN() -print(f'DSN: {dsn.message_id} {dsn.parse_status} {dsn.dsn_action} {dsn.dsn_status}')