# Class Netsmtp.client

    class client : Netchannels.in_obj_channel -> Netchannels.out_obj_channel -> object .. end

    method helo : ?host:string -> unit -> string list

Sends an EHLO command to the server. The optional argument `?host` defaults to the default hostname of the machine. This function returns the ESMTP lines returned by the server.

If EHLO is not supported, the method automatically falls back to HELO.

EHLO is specified in RFC 1869.

    method helo_response : string list

The response from the last HELO or EHLO

    method auth : Netsys_sasl.sasl_mechanism ->
           string ->
           string -> Netsys_sasl.credentials -> (string * string * bool) list -> unit

`auth mech user authz creds params`: Performs a SASL authentication using the AUTH command. See `Netsys_sasl.Client.create_session` for details.

Example:

    client # auth
      (module Netmech_digest_sasl.DIGEST_MD5)
      "user"
      ""
      [ "password", "sEcReT", [] ]
      []

    method authenticated : bool

Whether the `auth` command ran successfully

    method mail : string -> unit

Performs a MAIL FROM command. The `string` argument is the mail address (without < >) of the sender.

    method rcpt : string -> unit

Performs a RCPT TO command. the `string` argument is one of the mail address the mail has to be sent to. You have to use that function for each recipient of the mail.

If the server returns a 551 error (user relocated, see RFC 2821, section 3.4), the relocated adress is silently used, and the error is not raised

    method data : Netchannels.in_obj_channel -> unit

This method really send the mail. Do not issue that command without having used `mail` once, and at least `rcpt` once too

    method rset : unit -> unit

Reset the current transaction

    method expn : string -> string list option

Expand command : `expn list` will try to expand the Mailing list `list`. If the list cannot be Expanded (reply 252) then `None` is returned.

    method help : unit -> string list

Performs the Help command. Returns the server multiline answer.

    method noop : unit -> unit

NOOP : does nothing, keeps the connection alive.

    method quit : unit -> unit

Requests the server to end this session.

    method close : unit -> unit

Closes the file descriptors

    method starttls : peer_name:string option -> Netsys_crypto_types.tls_config -> unit

Sends STARTTLS, and negotiates a secure connection. This should only be done after EHLO, and only if "STARTTLS" is among the returned strings.

STARTTLS is specified in RFC 3207.

Note that it is meaningful to submit EHLO again after STARTTLS, as the server may now enable more options.

    method command : string -> int * string list

Sends this command, and returns the status code and the status texts.

    method tls_endpoint : Netsys_crypto_types.tls_endpoint option

Returns the TLS endpoint (after `STARTTLS`)

    method tls_session_props : Nettls_support.tls_session_props option

Returns the TLS session properties (after `STARTTLS`)

    method gssapi_props : Netsys_gssapi.client_props option

Returns GSSAPI properties, if available