Skip to main content

Daemonize a command and e-mail the results

Project description

Project Status: Active - The project has reached a stable, usable state and is being actively developed. https://img.shields.io/pypi/pyversions/daemail.svg MIT License

GitHub | PyPI | Issues

daemail (pronounced “DEE-mayl”, like “e-mail” but with a D) is a Python script 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. It should work in both Python 2.7 and Python 3.2+, the only external dependencies being the python-daemon package and the ubiquitous six package.

Installation

Just use pip (You have pip, right?) to install daemail and its dependencies:

pip install daemail

Usage

daemail [-C|--chdir <directory>]
        [-D|--dead-letter <mbox>]
        [-e|--encoding <encoding>]
        [-E|--stderr-encoding <encoding>]
        [-f|--from|--from-addr <address>]
        [-F|--failure-only]
        [-l|--logfile <logfile>]
        [-M|--mime-type|--mime <mime-type>]
        [-n|--nonempty]
        [--no-stdout]
        [--no-stderr]
        [-S|--split]
        [--stdout-filename <filename>]
        [-Z|--utc]
        -t|--to|--to-addr <address>  [-t|--to|--to-addr <address> ...]
        [<send options>]
        <command> [<arg> ...]

where <send options> is one of:

-s|--sendmail <command>  # default

--mbox <mbox>

--smtp-host <host>
    [--smtp-port <port>]
    [--smtp-username <username>]
    [--smtp-password <password> | --smtp-password-file <file> | --netrc | --netrc-file <file>]
    [--smtp-ssl | --smtp-starttls]

Options

  • -C <directory>, --chdir <directory> — Change to <directory> after daemonizing but before running <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 <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 <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.

  • -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.

  • --from-name <name> — Deprecated; set the “real name” in the argument to --from-addr 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!

  • -s <command>, --sendmail <command> — Send e-mail by passing the message on stdin to <command> (executed via the shell, in the directory specified with --chdir or its default); default command: sendmail -i -t. This is the default if neither --mbox nor --smtp-host is specified.

  • --mbox <mbox> — “Send” e-mail by appending it to the mbox file <mbox>

  • -M <mime-type>, --mime-type <mime-type>, --mime <mime-type> — Attach the standard output of <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

  • --smtp-host <host> — Send e-mail via SMTP, connecting to the given host. --smtp-host may be accompanied by the following options:

    • --smtp-port <port> — Connect to <host> on the given port; defaults to 25, or to 465 if --smtp-ssl is specified

    • --smtp-username <username> — Authenticate to the SMTP server using the given username. If a username is supplied (either on the command line or in a netrc file) but no password is, daemail will prompt the user for the SMTP password before daemonizing.

    • --smtp-password <password> — Authenticate to the SMTP server using the given password

    • --smtp-password-file <file> — Authenticate to the SMTP server using the contents of the given file (after removing the final line ending) as the password

    • --netrc — Fetch the SMTP username and/or password from ~/.netrc. If --smtp-username specifies a different username for the host than is given in the netrc file, the netrc file is ignored.

    • --netrc-file <file> — Like --netrc, but use the given file instead of ~/.netrc

    • --smtp-ssl — Use the SMTPS protocol to communicate with the server

    • --smtp-starttls — Use the SMTP protocol with the STARTTLS extension to communicate with the server

  • -S, --split — Capture the command’s stdout and stderr separately rather than as a single stream

  • --stdout-filename <filename> — Attach the standard output of <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.

  • --to-name <name> — Deprecated; set the “real name” in the argument to --to-addr instead

  • -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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

daemail-0.5.0.tar.gz (15.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

daemail-0.5.0-py2.py3-none-any.whl (17.3 kB view details)

Uploaded Python 2Python 3

File details

Details for the file daemail-0.5.0.tar.gz.

File metadata

  • Download URL: daemail-0.5.0.tar.gz
  • Upload date:
  • Size: 15.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for daemail-0.5.0.tar.gz
Algorithm Hash digest
SHA256 15952faee3f306e429ba1aea4929aaf3abd5069f142f742d2b4bc79729bddd63
MD5 f29af1c265724241e57cc919b43e6ed4
BLAKE2b-256 18f9f9c88f9381b73fd979c0bb3b10264a2bad0a0953d8c5c989b0fa81c9d1e4

See more details on using hashes here.

File details

Details for the file daemail-0.5.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for daemail-0.5.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a5c240beee596c6ea6156d0d3bb813252dde57c2033bdf789c8a34827aae628f
MD5 0fe47b666977b1a4f375ee4131077281
BLAKE2b-256 1dc614e8f16810256ee1aa6a2ebd322d17b96af2f06b38e24fa65c7a0b215422

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page