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.
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
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.
- -c FILE, --config FILE Read sending configuration for the
outgoing
library from
FILE
; defaults tooutgoing
'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 todead.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'slocale.getpreferredencoding
_. If decoding fails, the output will be attached to the e-mail as anapplication/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 anapplication/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 theFrom:
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 todaemail.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 toapplication/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
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'