#!/usr/bin/env python3
import socket,sys
host='127.0.0.1';port=int(sys.argv[1] if len(sys.argv)>1 else 25252);output=sys.argv[2] if len(sys.argv)>2 else '/tmp/bcos-smtp-message.eml';ready=sys.argv[3] if len(sys.argv)>3 else None
with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as server:
    server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1);server.bind((host,port));server.listen(1)
    if ready: open(ready,'w').write('ready')
    conn,_=server.accept()
    with conn:
        f=conn.makefile('rwb',buffering=0);f.write(b'220 test.local ESMTP\r\n');data_mode=False;message=[]
        while True:
            line=f.readline()
            if not line:break
            text=line.decode('utf-8','replace').rstrip('\r\n')
            if data_mode:
                if text=='.':
                    open(output,'wb').write(('\r\n'.join(message)+'\r\n').encode());f.write(b'250 2.0.0 queued\r\n');data_mode=False
                else:message.append(text[1:] if text.startswith('..') else text)
                continue
            upper=text.upper()
            if upper.startswith('EHLO'):f.write(b'250-test.local\r\n250 SIZE 10485760\r\n')
            elif upper.startswith('MAIL FROM'):f.write(b'250 2.1.0 OK\r\n')
            elif upper.startswith('RCPT TO'):f.write(b'250 2.1.5 OK\r\n')
            elif upper=='DATA':f.write(b'354 End data with <CR><LF>.<CR><LF>\r\n');data_mode=True
            elif upper=='QUIT':f.write(b'221 2.0.0 Bye\r\n');break
            else:f.write(b'250 OK\r\n')
