DEV Community

Guionardo Furlan
Guionardo Furlan

Posted on

3 3

Using local mail as notification tool

Using local mail as notification tool

Post created at 2022-05-04 14:25

I used to run commands and develop into linux terminal, and have some scheduled tasks running in the background.

I need to be notified on terminal about some finished processes in a generic form, without depending GUI notifications.

By default, every cron job thats writes to console is sent to user local email. So, local email will be my notification messages repository.

Setup

I used this setup in Ubuntu, but it must works in any distro.

  1. Adding current user to mail group
$ sudo adduser $USER mail
Adding user 'guionardo' to group 'mail' ...
Adding user guionardo to group mail
Done.
Enter fullscreen mode Exit fullscreen mode
  1. Install mailtools, postfix, and mutt
$ sudo apt install mailtools postfix mutt
Enter fullscreen mode Exit fullscreen mode
  1. Send test mail
$ echo "This is a test" | mail "--subject=Test email" $USER@localhost
Enter fullscreen mode Exit fullscreen mode
  1. Test new mail
$ mail
"/var/mail/guionardo": 1 message 1 new
>N 1 Guionardo Furlan qua mai 4 17:41 14/464 Test email
? q
Held 1 message in /var/mail/guionardo
Enter fullscreen mode Exit fullscreen mode

Ok, we have an e-mail into our inbox. Lets read with better tool.

$ mutt
Enter fullscreen mode Exit fullscreen mode
q:Quit d:Del u:Undel s:Save m:Mail r:Reply g:Group ?:Help
 1 O F mai 04 To guionardo@lo ( 2) Test email



---Mutt: /var/mail/guionardo [Msgs:1 Old:1 0,6K]---(threads/date)----(all)---
Enter fullscreen mode Exit fullscreen mode
i:Exit -:PrevPg <Space>:NextPg v:View Attachm. d:Del r:Reply j:Next ?:He
Date: Wed, 4 May 2022 17:41:20 +0000 (UTC)
From: Guionardo Furlan <guionardo@furlan-server>
To: guionardo@localhost
Subject: Test email
X-Mailer: mail (GNU Mailutils 3.7)

This is a test


-O F- 1/1: Guionardo Furlan Test email -- (all)
Enter fullscreen mode Exit fullscreen mode
  1. Setup for notifications

Add this content to your ~/.profile or equivalent file (.bashrc, .zshrc, etc):

MAIL_CHECK_TIME=0
mail_prompt() {
 local pwd='~'
 local MAIL_SECONDS_DIFF=$MAILCHECK

 local MAIL_ELAPSED_SECONDS=$((SECONDS - MAIL_CHECK_TIME))

 [ "$PWD" != "$HOME" ] && pwd=${PWD/#$HOME//~/}

 printf "033]0;%s@%s:%s033\%s" "${USER}" "${HOSTNAME%%.*}" "${pwd}"

 if [[ "$MAIL_CHECK_TIME" -eq "0" || "$MAIL_ELAPSED_SECONDS" -gt "$MAIL_SECONDS_DIFF" ]]; then
 local MAILX="$(mailx 2>/dev/null &)"
 UNREADEN_REGEX="s([0-9]{1,4})sn"
 [[ $MAILX =~ $UNREADEN_REGEX ]] && UNREADEN=$(echo "${BASH_REMATCH[1]}") || UNREADEN=0
 local COUNT=$((UNREADEN))
 local MESSAGE_TEXT="message"
 if [ "$COUNT" -gt "0" ]; then
 if [ "$COUNT" -gt "1" ]; then
 MESSAGE_TEXT="messages"
 fi
 echo "$COUNT unreaden $MESSAGE_TEXT. Run mutt"
 fi
 MAIL_CHECK_TIME=$SECONDS
 fi

}

if [[ $(which mailx) ]]; then
 PROMPT_COMMAND="mail_prompt"
fi
Enter fullscreen mode Exit fullscreen mode
  1. Close and reopen your terminal to load this configuration
  2. Now, when you access the terminal, messages not readden will show a prompt:
1 unreaden message. Run mutt
Enter fullscreen mode Exit fullscreen mode

In your custom scripts, you can send email to your local user and get notified.

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay