daemail

Daemonize a command and e-mail the results


Keywords
background, daemon, e-mail, email, mail, notifications, output, smtp, available-on-pypi, python
License
MIT
Install
pip install daemail==0.7.1

Documentation

Project Status: Active - The project has reached a stable, usable state and is being actively developed. CI Status coverage pyversions MIT License

GitHub | PyPI | Issues | Changelog

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.8 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
-D MBOX, --dead-letter MBOX
  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.
-f ADDRESS, --from ADDRESS, --from-addr ADDRESS
  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.
-t ADDRESS, --to ADDRESS, --to-addr ADDRESS
 

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'