module Peer_info : sig ... end
val create : ?flows:Mail_log.Flows.t ‑> dest:Types.Address.t ‑> Async.Reader.t ‑> Async.Writer.t ‑> Client_config.t ‑> t
val create_bsmtp : ?flows:Mail_log.Flows.t ‑> Async.Writer.t ‑> Client_config.t ‑> t
val config : t ‑> Client_config.t
val info : t ‑> Peer_info.t option
val is_using_tls : t ‑> bool
val is_using_auth_login : t ‑> bool
val with_session : t ‑> log:Mail_log.t ‑> component:Mail_log.Component.t ‑> credentials:Types.Credentials.t option ‑> f:(t ‑> 'a Async.Deferred.Or_error.t) ‑> 'a Async.Deferred.Or_error.t
val do_helo : t ‑> log:Mail_log.t ‑> component:Mail_log.Component.t ‑> unit Async.Deferred.Or_error.t
val send : t ‑> log:Mail_log.t ‑> ?flows:Mail_log.Flows.t ‑> component:Mail_log.Component.t ‑> here:Lexing.position ‑> Types.Command.t ‑> unit Async.Deferred.Or_error.t
val receive : ?on_eof:(?partial:Types.Reply.partial ‑> unit ‑> Types.Reply.t Async.Deferred.Or_error.t) ‑> ?timeout:Core.Time.Span.t ‑> ?flows:Mail_log.Flows.t ‑> t ‑> log:Mail_log.t ‑> component:Mail_log.Component.t ‑> here:Lexing.position ‑> [ `Bsmtp | `Received of Types.Reply.t ] Async.Deferred.Or_error.t
val send_receive : ?on_eof:(?partial:Types.Reply.partial ‑> unit ‑> Types.Reply.t Async.Deferred.Or_error.t) ‑> ?timeout:Core.Time.Span.t ‑> t ‑> log:Mail_log.t ‑> ?flows:Mail_log.Flows.t ‑> component:Mail_log.Component.t ‑> here:Lexing.position ‑> Types.Command.t ‑> [ `Bsmtp | `Received of Types.Reply.t ] Async.Deferred.Or_error.t
val send_string : t ‑> log:Mail_log.t ‑> ?flows:Mail_log.Flows.t ‑> component:Mail_log.Component.t ‑> here:Lexing.position ‑> string ‑> unit Async.Deferred.Or_error.t
val send_receive_string : ?on_eof:(?partial:Types.Reply.partial ‑> unit ‑> Types.Reply.t Async.Deferred.Or_error.t) ‑> ?timeout:Core.Time.Span.t ‑> t ‑> log:Mail_log.t ‑> ?flows:Mail_log.Flows.t ‑> component:Mail_log.Component.t ‑> here:Lexing.position ‑> string ‑> [ `Bsmtp | `Received of Types.Reply.t ] Async.Deferred.Or_error.t
val writer : t ‑> Async.Writer.t
val reader : t ‑> Async.Reader.t option
val remote_address : t ‑> Types.Address.t option