xemail / readme.md
command and library to send email
git clone http://git/xemail

# xemail

command and module to send email with starttls and client certificate support

The command-line usage is similar to the sendemail command (which is a great tool),
but with client certificates and a few more options for setting raw aspects of the message.

# install

```
# to get the command-line tool:
git clone https://git.nthia.dev/xemail && cd xemail && ln -s $PWD/cmd.js ~/.local/bin/xemail

# to get the library:
mkdir -p node_modules && git clone https://git.nthia.dev/xemail node_modules/xemail
```

# usage

```
usage: cmd.js {OPTIONS...} (MSG_FILE|-)

Send an email message with the contents of MSG_FILE, stdin ("-"), -m, or --msg.

-f FROM, --from=FROM
-t TO, --to=TO

  Required arguments where FROM and TO are each email addresses.
  You can also format the addresses in the form "DISPLAY <ADDR@HOST>"
  which will set the appropriate header to set a display name
  different from the email address.

-s SERVER, --server=SERVER
-s SERVER:PORT, --server=SERVER:PORT
-p PORT, --port PORT
 
  Connect to an smtp SERVER on PORT (default 25).
  If a SERVER isn't explicitly given, it is derived from FROM.

-m MSG_LINE, --msg MSG_LINE

  Instead of reading from MSG_FILE or stdin, set lines of content from arguments.
  Each -m or --msg will add one line to the message body.

-H FIELD:VALUE, --header=FIELD:VALUE

  Add "FIELD: VALUE" to the set of headers.

--date=DATE

  Alias for --header=Date:DATE

--no-date

  Do not automatically set a Date header.

--utc

  Use UTC time for automatically sent Date headers.

--raw

  Do not send any headers and do not encode the payload.
  MSG_FILE is responsible for setting headers and encoding.

--cert=CERTFILE --key=KEYFILE

  Use a client-side tls certificate for the connection.

--ca=CAFILE

  Use a custom certificate to verify the remote server.

-k, --reject-unauthorized

  Do not validate the SSL certificate presented by the server.

-v, --version

  Print the versinn of this software. (1.0.0)

--help -h

  Show this message.

```

# api

``` js
const xemail = require('xemail')
const xemailSend = require('xemail/send')
```

## xemail(opts, cb)

Connect to an smtp server and send a message:

* `opts.from` - string of sender address
* `opts.to` - string of recipient address
* `opts.data` - string, Buffer, or readable stream of message contents to send
* `opts.server` - string smtp server address to connect to
* `opts.port` - numeric port of smtp server
* `opts.rejectUnauthorized` - if `true`, ignore invalid ssl certificate from the server
* `opts.key` - tls client certificate private key
* `opts.cert` - tls client certificate
* `opts.ca` - ca certificate to authenticate the remote server

`cb(err, sent, code)` fires with an error or the sent boolean status and final smtp code.

## let stream = xemailSend(opts, cb)

All the same options of `xemail()` but does not connect to a server.

Instead you are given a duplex `stream` that can be attached to any transport.

# license

public domain