# TODO Need Eq, Show instances fo ReplyLine, SmtpError, else testing is hard ## Add RFC references Justify the code with reference to relevant RFCs. ## Sounder approach to serialization? The only data type we serialize is SMTP Commands, and it's handled by just one function, toByteString. So I think it's not worth the trouble of creating instances for e.g. the `cereal` package. 'AUTH' commands are serialized separately (and there is only one AUTH command implemented). ## Two-way mock A mock that simulates server responses as well, not just recording client commands. ## Improve error messages If you try to send more commands after quitting: e.g. you send ``` >>> quit >>> rset ``` then you'll get an error like this: ``` *** Exception: user error (Error executing smtp: UnexpectedResponse "not enough input") ``` Which means: the connection was closed, we couldn't pull expected input. But a more user-friendly error message would be nice. Also, the `SMTPError` errors that are thrown are fairly terse. It'd be nice to make those, also, more user-friendly.