Recently I was looking at creating a method of sending a warning email when ever my house temperature went below a threshold. I remembered that sSMTP was a simple way to send automated emails and CRON emails. I have some simple notes on what I did.
Very easy, just use apt-get from the command line…
sudo apt-get install ssmtp
Config at /etc/ssmtp/ssmtp.conf
Below is my config file with the critical info blocked out. Lines in Red are what I modded to get ssmtp working for me.
The key pieces to get it working for me at least were…
hostname = My ISP’s domain
root = my complete email that I use at the ISP
mailhub = I looked it up in Thunderbird, it is the smtp.myispsdomain.net part.
AuthUser=my complete email that I use at the ISP. It might be different for you. Years ago it used to be just the user name part of email without the domain.
AuthPass = The password that goes along with my email.
I commented out the defaults for the ones that existed in the code.
The config file is a bit ugly after I touched it but I was trying to get this up and running quick and didn’t clean it up. But, hey it works!
# # Config file for sSMTP sendmail # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. #root=postmaster <--- comment out
# The place where the mail goes. The actual machine name is required no # MX records are consulted. Commonly mailhosts are named mail.domain.com #mailhub=mail <-- comment out
# Where will the mail seem to come from? #rewriteDomain=
# The full hostname #hostname=raspberrypi <--- I was testing and kill this, failed to work # hostname has to be the mail domain! Or else it complains about # the raspberrypi part! The STMP server at frontier does that is. hostname=myispdomain.net
# Are users allowed to set their own From: address? # YES - Allow the user to specify their own From: address # NO - Use the system generated From: address #FromLineOverride=YES <-- Commented out and set below, I was testing!
# New Code put here 11302015 firstname.lastname@example.org mailhub=smtp.myispdomain.net
#UseSTARTTLS=YES <-- Tried this, I didn't need it for my ISP.
Once installed if you or root on the machine have any CRON jobs, you will start to get email from them. You can stop this by appending …
> /dev/null 2>&1
to the end of the commands that are being run by CRON. Which will cut back on the emails that you will receive.
I installed mail utils to allow sending simple messages…
sudo apt-get install mailutils
Then I sent a message via the command line…
echo "Test" | mail -s "Test Subject" email@example.com
…and I was able to see it work OK.
Send files via email
If you want to send files you have to install mpack.
sudo apt-get install mpack
Then you can send files to your email like this…
mpack -s "Test" /tmp/web/log.txt firstname.lastname@example.org
Command Line Usage
erick@raspberrypi ~ $ ssmtp email@example.com To:firstname.lastname@example.org From:email@example.com Subject:This is a test of ssmtp from the command line! Hello there this is a test of the ssmtp from the command line tool. It could be used to send a reminder or small snips of code. Use Ctrl-D when you are done. It is called up by using ssmtp firstname.lastname@example.org Bye, Me
Example of Sending CPU Temp Warning Emails
When I am away from home I can infer if my house is running to cold, which may indicate a problem with the furnace. The Raspberry Pi is light loaded, usually just idling, so the CPU temperature tracks the room temperature, with an offset. When I am away, I set the house thermostat at 47 degrees F. If it drops below this value the CPU temperature of the Raspberry Pi will drop below 34 degrees Celsius. So I can just have it send me an email if this happens. Then I can double check a log that is created of the temperature reading to see what is going on. Also I run a webcam pointed at an actual thermometer for a sanity check, this is logged by using fswebcam to take an hourly snapshot. So I have my bases covered for the most part. Obviously if the power is out, I am in the dark about the temperature, because the whole thing is down! Solving that is a future project.
Below is the snippet of code from a shell script that sits in /etc/cron.hourly that handles the warning emails that are sent to 2 addresses. variables mailaddr and mailaddr2.
temp is the CPU temperature in Celsius as an integer stripped using cut from the thermal_zone0 reading.
minimum and maximum are my temperature thresholds. I don’t care much about maximum but I have it set at 65 Deg. C. just in case.
# Read the temp and cut it to grab leftmost 2 characters, integer Temp temp="`cat /sys/class/thermal/thermal_zone0/temp | cut -c1-2`"
#echo $temp # Mail if about or below the limits if (( $temp > $maximum )); then #echo "above" echo "Rasp Pi CPU Temp = $temp. " | mail -s "Rasp Pi HIGH CPU Temp > $maximum" $mailaddr echo "Rasp Pi CPU Temp = $temp. " | mail -s "Rasp Pi HIGH CPU Temp > $maximum" $mailaddr2 elif (( $temp < $minimum )); then #echo "below" echo "Rasp Pi CPU Temp = $temp. " | mail -s "Rasp Pi LOW CPU Temp < $minimum" $mailaddr echo "Rasp Pi CPU Temp = $temp. " | mail -s "Rasp Pi LOW CPU Temp < $minimum" $mailaddr2 fi
I want to know if an when the Raspberry Pi I run 24/7 ever reboots due to a power outage, so I have it send me an email. The line of code below handles it and is in the root crontab. I have it sleep for 180 seconds first, then send the email. This allows the cascaded routers which I have the Pi connected to and the cable modem, time to come on line.
@reboot sleep 180 && echo "Rasp Pi Rebooted" | mail -s "Rasp Pi Reboot!" email@example.com
I also log boots in a file that I can view online, just to keep track in one record.
@reboot date >> /var/www/bootlog.txt
Keeping track of boots helps for instance if I am away from home and the power goes out. If I get the email that the Pi rebooted, I can check to see how long the power was down and what the temperature of the house is to see if all is well.
Every hour I take a time/date stamped webcam snapshot of a thermometer so I can just look to see how many are missing and have a rough estimate of how long the power was out and how cold the house got and verify that it is getting warmer because the furnace is on!
In the future I will connect a BME280 sensor to the Raspberry Pi that will be able to read ambient room temperature directly, along with humidity and barometric pressure. So I won’t have to infer the house temperature via the CPU temperature.
This is the page I used to configure ssmtp on the Rasp Pi.