# Emili

Simple interface for sending mails. Turns input formats
such as Markdown or console outputs using ANSI colors
into nice dual plaintext/html messages.


## Module usage


```python
import emili

content = """
# this is a title

Read **this** is very _important_!!

"""

emili.sendmail(
    from  = "me@acme.cat",
    to = [ "abe@acme.cat", "bill@acme.cat" ],
    bcc = [ "me@acme.cat" ],
    subject = "About this email"
    md = content,
    attachments = [ 'onefile.pdf' ],
	config = '../config.py',
    )
```


Right now a config.py file is required containing the configuration options
for the SMTP connection in a dictionary named `smtp`:

```python
smtp=dict(
    host='smtp.acme.cat',
    port=465,
    user='roadrunner@acme.cat',
    password='mecmec',
)
```


## Command line usage

```
usage: emili.py [-h] -f SENDER -s SUBJECT -t recipient [--body TEXT]
                [--bodyfile BODYFILE] [-C CONFIG.PY] [-c CC] [-b BCC]
                [-r REPLYTO] [--format FORMAT] [--style CSSFILE]
                [--template TEMPLATE] [--dump OUTPUTFILE.eml]
                [FILE [FILE ...]]

Sends an email.

positional arguments:
  FILE                  File to attach

optional arguments:
  -h, --help            show this help message and exit
  -f SENDER, --from SENDER
                        Message sender ('From:' header)
  -s SUBJECT, --subject SUBJECT
                        Message subject ('Subject:' header)
  -t recipient, --to recipient
                        Message recipient ('To:' header) (multiple)
  --body TEXT           Message body (defaults to stdin)
  --bodyfile BODYFILE   File containing the message body (defaults to stdin)
  -C CONFIG.PY, --config CONFIG.PY
                        Python Module with smtp configuration defined.
  -c CC, --cc CC        Message copy recipient ('CC:' header) (multiple)
  -b BCC, --bcc BCC     Message hidden copy recipient ('BCC:' header)
                        (multiple), other recipients won't see this header
  -r REPLYTO, --replyto REPLYTO
                        Default address to reply at ('Reply-To:' header)
                        (multiple)
  --format FORMAT       Format for the body. 'md' takes markdown and generates
                        both html and text. 'ansi' does the same, turning ANSI
                        color codes in html or stripping them for text.
  --style CSSFILE       Style sheet for the html output, (multiple)
  --template TEMPLATE   Alternative template for the html body.
  --dump OUTPUTFILE.eml
                        Instead of sending, dump the email into a file
```

## reportrun

```
usage: reportrun [-h] -s SUBJECT -t RECIPIENT [-f SENDER] [-C CONFIG.PY]
                [FILE [FILE ...]] -- COMMAND [COMMAND_ARG ...]

reportrun wraps the execution of a command and sends an email
whenever the command fails. The mail sending is processed by
emili so that ansi codes and spacing are shown properly.

positional arguments:
  FILE                  File to attach
  COMMAND               Command to run
  COMMAND_ARG           Argument for COMMAND

optional arguments:
  -f SENDER, --from SENDER
                        Message sender ('From:' header)
  -s SUBJECT, --subject SUBJECT
                        Message subject ('Subject:' header)
  -t recipient, --to recipient
                        Message recipient ('To:' header) (multiple)
  -C CONFIG.PY, --config CONFIG.PY
                        Python Module with smtp configuration defined.
  -a, --always
                        Sends even if the command does not fail.
  --
                        Marks the start of the command to execute.
```

## Changelog

### 1.6 (2019-10-09)

- Fix: reportrun ignored endlines
- reportrun accepts attatchment
- reportrun --help option and documented in README

### 1.5 (2018-10-15)

- Added `reportrun` script

### 1.4 (2017-07-02)

- Fix: dump does not require configuration

### 1.3 (2016-11-02)

- `--dump` option to dump the resulting email as file instead of sending it
- Fix: Better processing addresses in the format `Me <me@here.org>`
- Fix: Do not take the full path as attachment name
- `activate_wrapper.sh` moved to `somenergia-utils` repo

### 1.2 (2016-03-28)

- Option `-c`/`--config` to explicit configuration file
- Added wrapper `execute_send_mail.sh`
- Added wrapper `activate_wrapper.sh`

### 1.1 (2016-01-12)

- Available on PyPi

### 1.0 (2016-01-12)

- First version

