Daemonize a command and e-mail the results

## Project description

daemail (pronounced “DEE-mayl”, like “e-mail” but with a D) is a Python script built on top of python-daemon for running a normally-foreground command in the background and e-mailing its output (by default, the combined stdout and stderr) once it’s done.

## Installation

daemail requires Python 3.6 or higher. Just use pip for Python 3 (You have pip, right?) to install daemail and its dependencies:

python3 -m pip install daemail

## Usage

daemail [<options>] <command> [<arg> ...]

daemail runs command with the given arguments in the background and sends an e-mail once the command finishes. The sending of the e-mail is performed by the outgoing library, and thus an outgoing configuration file must be created with settings for sending e-mail before daemail can be used.

### Options

-c FILE, --config FILE

Read sending configuration for the outgoing library from FILE; defaults to outgoing’s default configuration file

-C DIR, --chdir DIR

Change to DIR after daemonizing but before running the command; defaults to the current directory

If an error occurs when trying to send, append the e-mail (including a description of the error) to the file MBOX; defaults to dead.letter. If the file already exists, it must be a valid mbox file.

-e ENCODING, --encoding ENCODING

Expect the stdout (and stderr, if --split is not in effect) of the command to be in the given encoding; defaults to the preferred encoding returned by Python’s locale.getpreferredencoding. If decoding fails, the output will be attached to the e-mail as an application/octet-stream file named “stdout”.

When --mime-type or --stdout-filename is also given, this option has no effect other than to set the default value for --stderr-encoding.

-E ENCODING, --stderr-encoding ENCODING

Expect the stderr of the command to be in the given encoding; defaults to the value specified via --encoding or its default. If decoding fails, the stderr output will be attached to the e-mail as an application/octet-stream file named “stderr”.

This option only has an effect when --split is given, either implicitly or explicitly.

--foreground, --fg

Run everything in the foreground instead of daemonizing. Note that command output will still be captured rather than displayed.

Set the From: address of the e-mail. The address may be given in either the form “address@example.com” or “Real Name <address@example.com>.” If not specified, daemail will not set the From: header and will expect the mail command or SMTP server to do it instead.

-F, --failure-only

Only send an e-mail if the command failed to run or exited with a nonzero status

-l LOGFILE, --logfile LOGFILE

If an unexpected & unhandleable fatal error occurs after daemonization, append a report to LOGFILE; defaults to daemail.log

Such an error is a deficiency in the program; please report it!

-M MIME-TYPE, --mime-type MIME-TYPE, --mime MIME-TYPE

Attach the standard output of the command to the e-mail as an inline attachment with the given MIME type. The MIME type may include parameters, e.g., --mime-type "text/html; charset=utf-16". If --stdout-filename is not also supplied, the attachment is named “stdout”. Implies --split.

-n, --nonempty

Do not send an e-mail if the command exited successfully and both the command’s stdout & stderr were empty or not captured

--no-stdout

Don’t capture the command’s stdout; implies --split

--no-stderr

Don’t capture the command’s stderr; implies --split

-S, --split

Capture the command’s stdout and stderr separately rather than as a single stream

--stdout-filename FILENAME

Attach the standard output of the command to the e-mail as an inline attachment with the given filename. If --mime-type is not also supplied, the MIME type of the attachment is deduced from the file extension, falling back to application/octet-stream for unknown extensions. Implies --split.

Set the recipient of the e-mail. The address may be given in either the form “address@example.com” or “Real Name <address@example.com>.”

This option is required. It may be given multiple times in order to specify multiple recipients.

-Z, --utc

Show start & end times in UTC instead of local time

## Caveats

• Input cannot be piped to the command, as standard input is closed when daemonizing. If you really need to pass data on standard input, run a shell, e.g.:

daemail bash -c 'command < file'

or:

daemail bash -c 'command | other-command'

## Project details

Uploaded source
Uploaded py3