|smtpOutQueue :: [String]||Caller must output any lines queued up in this list, making sure to
clear them in the state passed back to smtpReceive. These lines are in
reverse order, so the caller must reverse them before processing.
They do not have end-of-line characters, so the caller must add "\r\n"
on the end (as required by RFC2821 - not just "\n").
|smtpReceive :: String -> SMTPState -> SMTPState||When there is nothing to send, the caller should wait for a line from
the SMTP server, strip any end-of-line characters, and pass it to this
function for processing.
|smtpSuccess :: Bool||When True, this flag indicates that the SMTP session has completed
successfully and there is no more work to do.
|smtpFailure :: Maybe String||When Just err, this indicates that a protocol error has occurred, and
that the caller must terminate the session.
|smtpSent :: Int||The number of emails successfully sent so far.