Header & body state not reset on abort
### Reproduced from GH-2 The following from https://github.com/domsekotill/kilter.service/issues/2 shows an issue when sending multiple messages in a single session, which seems to be related to headers (and body) accessors not being reset on receipt of an `Abort`. #### Milter code ```python import logging import anyio from kilter.protocol import Accept from kilter.service import Runner, Session logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) async def tryme(session: Session) -> Accept: await session.headers.collect() async with session.headers as headers: async for header in headers: logger.info(f"{header.name} -> {header.value!r}") return Accept() async def main() -> None: listener = await anyio.create_tcp_listener(local_host="0.0.0.0", local_port=9000) await listener.serve(Runner(tryme)) if __name__ == "__main__": anyio.run(main) ``` #### Send messages with ```python #!/usr/bin/env python3 import smtplib frm = "test@kodo.org.uk" to = "root@smtp.test.kodo.org.uk" msg = f""" To: {to} From: {frm} Subject: Test Multi message test emails """.lstrip() with smtplib.SMTP() as client: client.connect("postfix") client.sendmail(frm, to, msg) client.sendmail(frm, to, msg) client.sendmail(frm, to, msg) client.sendmail(frm, to, msg) ``` #### Postfix logs ``` postfix-1 | Feb 17 18:30:59 smtp postfix/smtpd[19]: connect from test-milter-1.test_test[172.24.0.3] postfix-1 | Feb 17 18:30:59 smtp postfix/smtpd[19]: using backwards-compatible default setting mynetworks_style=subnet to permit request from client "test-milter-1.test_test[172.24.0.3]" postfix-1 | Feb 17 18:30:59 smtp postfix/smtpd[19]: 3FC9C244824: client=test-milter-1.test_test[172.24.0.3] postfix-1 | Feb 17 18:30:59 smtp postfix/cleanup[23]: 3FC9C244824: message-id=<> postfix-1 | Feb 17 18:30:59 smtp postfix/qmgr[9]: 3FC9C244824: from=<test@kodo.org.uk>, size=342, nrcpt=1 (queue active) postfix-1 | Feb 17 18:30:59 smtp postfix/smtpd[19]: warning: milter inet:milter:9000: can't read SMFIC_MAIL reply packet header: Application error postfix-1 | Feb 17 18:30:59 smtp postfix/smtpd[19]: NOQUEUE: milter-reject: MAIL from test-milter-1.test_test[172.24.0.3]: 451 4.7.1 Service unavailable - try again later; from=<test@kodo.org.uk> proto=ESMTP helo=<[172.24.0.3]> postfix-1 | Feb 17 18:30:59 smtp postfix/smtpd[19]: disconnect from test-milter-1.test_test[172.24.0.3] ehlo=1 mail=1/2 rcpt=1 data=1 rset=1 quit=1 commands=6/7 postfix-1 | Feb 17 18:30:59 smtp postfix/local[24]: warning: dict_nis_init: NIS domain name not set - NIS lookups disabled postfix-1 | Feb 17 18:30:59 smtp postfix/local[24]: 3FC9C244824: to=<root@smtp.test.kodo.org.uk>, relay=local, delay=0.12, delays=0.06/0.02/0/0.03, dsn=2.0.0, status=sent (delivered to mailbox) postfix-1 | Feb 17 18:30:59 smtp postfix/qmgr[9]: 3FC9C244824: removed ``` #### Milter logs ``` milter-1 | DEBUG:kilter.service:received: Negotiate(version=6, action_flags=<ActionFlags.ALL: 511>, protocol_flags=<ProtocolFlags.NO_CONNECT|NO_HELO|NO_SENDER|NO_RECIPIENT|NO_BODY|NO_HEADERS|NO_END_OF_HEADERS|NO_UNKNOWN|NO_DATA|SKIP|REJECTED_RECIPIENT|NR_CONNECT|NR_HELO|NR_SENDER|NR_RECIPIENT|NR_DATA|NR_UNKNOWN|NR_END_OF_HEADERS|NR_BODY|NR_HEADER|HEADER_LEADING_SPACE: 2097151>, macros={}) milter-1 | INFO:kilter.service:Negotiating with MTA milter-1 | DEBUG:kilter.service:sent: Negotiate(version=6, action_flags=<ActionFlags.ALL: 511>, protocol_flags=<ProtocolFlags.SKIP: 1024>, macros={}) milter-1 | DEBUG:kilter.service:received: Macro(stage=67, macros={'j': 'smtp.test.kodo.org.uk', '{daemon_name}': 'smtp.test.kodo.org.uk', '{daemon_addr}': '172.24.0.2', 'v': 'Postfix 3.7.11', '_': 'test-milter-1.test_test [172.24.0.3]'}) milter-1 | DEBUG:kilter.service:received: Connect(hostname='test-milter-1.test_test', address=IPv4Address('172.24.0.3'), port=46448) milter-1 | INFO:kilter.service:Client connected from test-milter-1.test_test milter-1 | DEBUG:kilter.service:sent: Continue() milter-1 | DEBUG:kilter.service:received: Macro(stage=72, macros={}) milter-1 | DEBUG:kilter.service:received: Helo(hostname='[172.24.0.3]') milter-1 | DEBUG:kilter.service:sent: Continue() milter-1 | DEBUG:kilter.service:received: Macro(stage=77, macros={'{mail_addr}': 'test@kodo.org.uk', '{mail_host}': 'kodo.org.uk', '{mail_mailer}': 'smtp'}) milter-1 | DEBUG:kilter.service:received: EnvelopeFrom(sender=<memory at 0x7fc34f353b80>, arguments=[<memory at 0x7fc34f1f8340>]) milter-1 | DEBUG:kilter.service:sent: Continue() milter-1 | DEBUG:kilter.service:received: Macro(stage=82, macros={'{rcpt_addr}': 'root@smtp.test.kodo.org.uk', '{rcpt_host}': 'smtp.test.kodo.org.uk', '{rcpt_mailer}': 'local'}) milter-1 | DEBUG:kilter.service:received: EnvelopeRecipient(recipient=<memory at 0x7fc34f353dc0>, arguments=[]) milter-1 | DEBUG:kilter.service:sent: Continue() milter-1 | DEBUG:kilter.service:received: Macro(stage=84, macros={'i': '3FC9C244824'}) milter-1 | DEBUG:kilter.service:received: Data() milter-1 | DEBUG:kilter.service:sent: Continue() milter-1 | DEBUG:kilter.service:received: Macro(stage=76, macros={'i': '3FC9C244824'}) milter-1 | DEBUG:kilter.service:received: Header(name='To', value=<memory at 0x7fc34f1f81c0>) milter-1 | DEBUG:kilter.service:sent: Continue() milter-1 | DEBUG:kilter.service:received: Macro(stage=76, macros={'i': '3FC9C244824'}) milter-1 | DEBUG:kilter.service:received: Header(name='From', value=<memory at 0x7fc34f1f8340>) milter-1 | DEBUG:kilter.service:sent: Continue() milter-1 | DEBUG:kilter.service:received: Macro(stage=76, macros={'i': '3FC9C244824'}) milter-1 | DEBUG:kilter.service:received: Header(name='Subject', value=<memory at 0x7fc34f1f81c0>) milter-1 | DEBUG:kilter.service:sent: Continue() milter-1 | DEBUG:kilter.service:received: Macro(stage=78, macros={'i': '3FC9C244824'}) milter-1 | DEBUG:kilter.service:received: EndOfHeaders() milter-1 | INFO:__main__:To -> b'root@smtp.test.kodo.org.uk' milter-1 | INFO:__main__:From -> b'test@kodo.org.uk' milter-1 | INFO:__main__:Subject -> b'Test' milter-1 | INFO:kilter.service:Returning response Accept from tryme milter-1 | DEBUG:kilter.service:sent: Accept() milter-1 | DEBUG:kilter.service:received: Abort() milter-1 | DEBUG:kilter.service:received: Macro(stage=77, macros={'{mail_addr}': 'test@kodo.org.uk', '{mail_host}': 'kodo.org.uk', '{mail_mailer}': 'smtp'}) milter-1 | DEBUG:kilter.service:received: EnvelopeFrom(sender=<memory at 0x7fc34f353f40>, arguments=[<memory at 0x7fc34f353880>]) milter-1 | INFO:__main__:To -> b'root@smtp.test.kodo.org.uk' milter-1 | INFO:__main__:From -> b'test@kodo.org.uk' milter-1 | INFO:__main__:Subject -> b'Test' ```
issue