p3mail (Pathetic Python Pipe Mail) allows you to send terminal outputs by mail
Basically something like this
./long_running_command_printing_logs | p3mail "My mail's subject"
Since it is highly probable that you are both the sender and receiver, these latter are pre-defined in a config file (see below).
Important note Remember that only stdout is captured when using pipes. You may want to redirect stderr to stdout to also catch errors. For example
./my_command_printing_errors 2>&1 | p3mail "My mail's subject"
Note: the order of stdout and stderr outputs is not preserved :( See: https://hisham.hm/2016/11/24/fun-hack-to-redirect-stdout-and-stderr-in-order/
pip install p3mail
Copy the config_example
file to $HOME/.config/p3mail/config
and start using p3mail !
See the examples below.
usage: p3mail [-h] [--to TO] [--from DEST] [--config CONFIG] subject
positional arguments:
subject The subject of the mail
optional arguments:
-h, --help show this help message and exit
--to TO The receiver's address. If not provided, it will look at
the config file
--from DEST The sender's address. If not provided, it will look at the
config file
--config CONFIG Specify a custom location for the config file
my_backup_program | p3mail "Backup for `hostname` on `date`"
If your cron job is ran by root
p3mail will look at /home/root/.config/p3mail/config
which is not something you might want. You can specify the config
file location with:
echo "Hello msg body" | p3mail --config /home/alice/.config/p3mail/config "My subject"
Tip: you can put an alias in your .bashrc
to avoid specifying this file everytime
like this:
p3mail="p3mail --config /home/alice/.config/p3mail/config"
I coded this application because it is always painful (at least for me) to make the built-in mail service work (or whatever it is called on Linux distributions). Here are some other reasons:
- You don't always have the rights to configure this mail service (e.g. on a remote server)
sendmail
,mail
or other mail sender command line tools are not always installed or configured on the machines you are using- p3mail only requires that Python 3 is installed
- p3mail does not requires sudo rights
- p3mail needs a reason to live
You may not want to hardcode your smtp user or your smtp password in a config file. I understand that so p3mail allows you to read your credentials from environment variables.
- In your
config
set as an empty value for either/bothSmtpUser
/SmtpPass
e.g.SmtpPass =
- Then call
p3mail
like this:
export SMTP_USER=alice
export SMTP_PASS=super_secr3t_passw0rd
./my_verbose_script | p3mail "Verbose script report"
- Add Gmail oauth support