Skip to main content

Send a formatted email from the command line

Project description

Send Mail Via Python (smvp)


smvp logo

The smvp utility takes a file whose contents will be parsed and packaged into the body of an email message, then sent to a designated email address. The input file can be a text file with ANSI color codes, HTML, or plain text. The resulting email will be sent as a multi-part MIME message that renders properly in both plain text and HTML.

Note: The file itself is not sent as an attachment; instead, the contents of the file are put into the body of the email.

Use Case

There are probably a few, but I wrote smvp for two primary reasons:

  1. I found that fiddling with postfix and sendmail was a pain.
  2. I want my cron scripts to email me status information and the contents of various log files. Some of the files contain ANSI escape sequences for terminal colors. The smvp utility converts those ANSI escape sequences into proper HTML tags, so the emails I get are nicely formatted. You could set $MAILTO in your crontab, but you won't get proper handling of ANSI escape sequences, and refer to number 1 above.

Installation

Use your preferred Python package installer for command line tools, for example:

pipx install smvp

or

uv tool install smvp

or

python3 -m venv .venv
source .venv/bin/activate
pip3 install smvp

Requirements

First

Make sure the following environment variables are set and exported in your current shell:

export SMVP_USER="<your email>"    # e.g. "myemail@gmail.com"
export SMVP_TOKEN="<your token>"   # e.g. "<gmail app password>"
export SMVP_SERVER="<smtp server>" # e.g. "smtp.gmail.com"

It is recommended that you put the lines above in your "rc" file (.bashrc, .zshrc, etc.) for use across multiple shell sessions and processes. To confirm you have the environment variables correctly set (with the correct spellings), run this in a terminal:

set | grep ^SMVP_

Note: If you make changes to your "rc" file, make sure to source it or open a new terminal window before running smvp again.


Tip: If you're using cron and sending mail with smvp from within a script, make sure to include the environment variables at the top of your crontab so your scripts will have access to them during execution. Also include a line in your script that exports the directory path where your Python tool installer puts things. For example, if you're using uv on Ubuntu, you would put something like this near the top of your bash script:

# Setup PATH export so the script can find installed Python tools
export PATH="$PATH:/home/<yourhome>/.local/bin"

Second

The SMVP_SERVER you select must support secure TLS connections on port 587. Check the SMTP settings for your email provider. This is the default TLS port on Gmail, so if you're using your Gmail account to send emails, you're good to go.

Styling

smvp offers custom font and font size options for your email. The default font for formatted HTML email is Courier New, 12px. Beyond the default, you can choose any font size from 2px up to and including 100px, from among these font families:

"Andale Mono", "Arial", "Brush Script MT", "Comic Sans MS",
"Courier New", "Garamond", "Georgia", "Helvetica", "Impact",
"Luminari", "Monaco", "Tahoma", "Times New Roman", "Trebuchet MS",
"Verdana", "fantasy", "monospace", "sans-serif", "serif"

Note: Not every font will render properly on every device. When in doubt, fonts like: "monospace", "sans-serif", "fantasy", and "serif" are pretty safe. You may just have to try a few options to land on the right one for your use case.

Usage

usage: smvp [-h] [-f FONT_FAMILY] [-s FONT_SIZE] [-v] recipient subject file

For example:

smvp friend@gmail.com "Hello, Friend" ~/logfile.txt -f "Trebuchet MS" -s 14

For more details, run:

smvp -h

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

smvp-0.2.16.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

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

smvp-0.2.16-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

Details for the file smvp-0.2.16.tar.gz.

File metadata

  • Download URL: smvp-0.2.16.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for smvp-0.2.16.tar.gz
Algorithm Hash digest
SHA256 e8615a0fe4ba93263ef89a2da424d5bff8bce8b7d175968e67a8818bc341fcbb
MD5 3fbb0d47bb84fedf97a5855423cb8451
BLAKE2b-256 f0a54be42c51b1b1c8da8adbab76e16a9ba14c25f9b576bbbd44b1d94e07b00d

See more details on using hashes here.

File details

Details for the file smvp-0.2.16-py3-none-any.whl.

File metadata

  • Download URL: smvp-0.2.16-py3-none-any.whl
  • Upload date:
  • Size: 9.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for smvp-0.2.16-py3-none-any.whl
Algorithm Hash digest
SHA256 7d81240c4c15442ab80d176260c492c26ca51e61c45decbe9c8a2032d865706f
MD5 d6972cd111ca354466d78fe9c2ffb835
BLAKE2b-256 f0f65dc43984a8797412c0b3308c72e5d5c6dd195fa3f1bb8504421d5cff210b

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