title: Send emails using the command line for fun and profit! date: 2020-09-04 layout: post lang: en ref: send-emails-using-the-command-line-for-fun-and-profit
Here are a few reasons why:
-
send yourself and other people notification of cronjobs, scripts runs, CI jobs, etc.
-
leverage the POSIX pipe
|
, and pipe emails away! -
because you can.
Reason 3 is the fun part, reasons 1 and 2 are the profit part.
First install and configure SSMTP for using, say, Gmail as the email server:
# file /etc/ssmtp/ssmtp.conf
FromLineOverride=YES
MailHub=smtp.gmail.com:587
UseSTARTTLS=YES
UseTLS=YES
rewriteDomain=gmail.com
root=username@gmail.com
AuthUser=username
AuthPass=password
Now install GNU Mailutils (sudo apt-get install mailutils
or the
equivalent on your OS), and send yourself your first email:
echo body | mail -aFrom:email@example.com email@example.com -s subject
And that's about it, you've got mail. Here are some more places where it might be applicable:
# report a backup cronjob, attaching logs
set -e
finish() {
status=$?
if [[ $status = 0 ]]; then
STATUS="SUCCESS (status $status)"
else
STATUS="FAILURE (status $status)"
fi
mail user@example.com \
-s "Backup job report on $(hostname): ${STATUS}" \
--content-type 'text/plain; charset=utf-8' \
-A"$LOG_FILE" <<< 'The log report is in the attachment.'
}
trap finish EXIT
do-long-backup-cmd-here
# share the output of a cmd with someone
some-program | mail someone@example.com -s "The weird logs that I was talking about"
...and so on.
You may consider adding a alias mail='mail -aFrom:email@example.com'
so you
don't keep re-entering the "From: " part.
Send yourself some emails to see it working!