I recently setup motion on my Raspberry Pi so I could stream a Logitech c110 to my Android phone. That was successfully setup in this post.
Next step was to start sending the snapshots to my email address when motion was detected. That way I could see if anything was being detected without having to log into the Raspberry Pi itself.
As I started off with RSE, there is no mail daemon installed, so that’s the first thing I need to do.
sudo apt-get install postfix
Configuration for postfix will depend on where you want email to be routed to. I will be sending it to GMail, and my ISP needs the mail to go through their mail server, so I selected Internet with smarthost
Next thing to setup is the local mail client. There are a few options, but in this post we will use heirloom-mailx.
sudo apt-get install heirloom-mailx
We can test out the Postfix install by attempting to send a test email with our newly installed mail client now !
echo 'hi' | mail -s Test <Your Email Address>
This will send an email to your email address with a body text of “hi” and the subject of “Test”.
If you receive it, congratulations ! Your Pi is now emailing out.
If not then you may need to check your junk mail to see if it got junked.
If there are any issues getting the mail out, running mail
on the Pi will launch the mail client in which you will see any failed attempts to send an email.
Once Postfix and the local email client is setup, it’s time to configure motion.
If you’re only running one camera, in /etc/motion/motion.conf at approximately line 521, you should see this
; on_picture_save value
This is the line that configures what motion will do to a file once it is saved.
What we will do, is setup motion to attach the file to an email, and send it to your email address when motion is detected and a file is saved.
To do that, change line 521 to the following –
on_picture_save echo 'webcam alert' | mail -a %f -s "Webcam Alert" <Your Email Address>
Make sure you remove the ; at the beginning as that denotes a commented out line.
The ‘webcam alert’ text can be changed to whatever you want in your version.
Running mail with the -a command line argument will attach the file specified, in this case it is %f, which is motion’s variable for the saved file.
Once that is done, restart motion with /etc/init.d/motion restart and whenever you get motion detected, it will email you the picture as an attachment !
I have exchanged on_picture_save value with on_picture_save echo ‘webcam alert’ | mail -a %f -s “Webcam Alert” (w/o brackets) but it is not sending an email. I´m using SSMTP and it is sending emails via console fine. When I start motion it is saving the files. What could I have missed out? Thanks.
SSMTP ?
I’m assuming that’s Secure smtp ?
Can you pipe the output of the mail command to a log file so that we can see what it outputs ?
sSMTP may stay for “simple”, I´m not sure. See http://wiki.debian.org/sSMTP
This is the Mail Log, hope it´s what you were looking for, when I manually send an email:
May 27 16:56:42 raspberrypi sSMTP[2262]: Creating SSL connection to host
May 27 16:56:45 raspberrypi sSMTP[2262]: SSL connection using RSA_AES_128_CBC_SHA1
May 27 16:56:47 raspberrypi sSMTP[2262]: Sent mail for pi@raspberrypi (221 2.0.0 SMTP closing connection) uid=1000 username=pi outbytes=411
Not quite, sorry I didnt’ explain myself well enough.
We want to change this line
on_picture_save echo 'webcam alert' | mail -a %f -s "Webcam Alert"
to this
on_picture_save echo 'webcam alert' | mail -a %f -s "Webcam Alert" > /var/log/motionmail.log
Then we can have a look at motionmail.log and see what it’s doing.
hmm… thanks for your explanation. Unfortunately it is not creating motionmail.log. I have also tried to set daemon=no and manually start motion in order to see if it is creating pictures, and it does: [1] File of type 1 saved to: /tmp/motion/01-20130528194049-00.jpg
The only new log I can find is mail.log.
I don´t wanna spam your really nice blog, if you want, feel free to contact me via email (I receive the address I mentioned) and we later work on a nice appendix for your kb? Thanks.
This isn’t spam 🙂 Knowledge for all 🙂
I’ve just realised, you haven’t put a destination email address…
The whole line should have your email address at the end.
on_picture_save echo ‘webcam alert’ | mail -a %f -s “Webcam Alert” test@test.com
Yes, that is how I did it:
; on_picture_save echo ‘webcam alert’ | mail -a -s “Webcam Alert” address@mydomain.com > /var/log/motionmail.log
I´m running my own MTA so I can see if someone tries to connect to it but nothning happens. No motionmail.log file is being created in /var/log/
Ah right.
which mail client are you using ?
Is there a verbosity argument ?
I´m using sSMTP (Simple SMTP) and configured as following:
AuthUser=name@mydomain.com
AuthPass=all_mine
FromLineOverride=YES
mailhub=m.mydomain.com:587
UseSTARTTLS=YES
Works if I send an email via terminal.
I have tried the command via terminal and created motionmail.log manually because if not, it was saying the file was not found. That´s the output:
“root@raspberrypi:/home/pi# echo ‘webcam alert’ | mail -a %f -s “Webcam Alert” name@mydomain.com < /var/log/motionmail.log
mail: Invalid header: %f
mail: Null message body; hope that's ok
root@raspberrypi:/home/pi#"
Mail was successfully sent, nothing was written into motionmail.log
Needs to be > not <
Arghhh, but OK I found something out: When I run echo ‘webcam alert’ | mail -a %f -s “Webcam Alert” name@mydomain.com > /var/log/motionmail.log via Terminal I´ve been told I have no appropriate rights, when I do this command as root it creates motionmail.log but it´s empty.
When I start motion via motion -c /etc/motion/motion.conf everything is fine, it´s taking and saving pictures but not sending them. motionmail.log does not change, also the timestamp remains the same to the time I started motion via Terminal.
Set motion daemon to yes – restart motion. Taking and saving pictures yes, sending mail no 🙁
Oops, forgot that you wouldn’t have write access to /var/log
Try logging to /tmp instead when you run it manually.
ok, when I start this command manually it creates the log in /tmp but it´s empty (probably because there´s no error?)
I started motion manually. Pictures are saved into /tmp but motionlog is not being created (I made a reboot before). Motion Daemon is disabled.
If I enable Motion Daemon it´s still saving pictures in /tmp but not creating motionmail.log
This is the command in motion.conf:
# Command to be executed when a picture (.ppm|.jpg) is saved (default: none)
# To give the filename as an argument to a command append it with %f
; on_picture_save echo ‘webcam alert’ | mail -a %f -s “Webcam Alert” name@mydomain.com > /tmp/motionmail.log
I just noticed that there is a ; in front of the line…that comments the line out so that it doesn’t actually do anything.
remove the ; and also remove > /tmp/motionmail.log
I thought # or // comments out. Ok, we´re getting closer 🙂
Can you help with this?
[1] File of type 8 saved to: /tmp/motion/01-20130603192125.swf
[1] File of type 1 saved to: /tmp/motion/01-20130603192125-00.jpg
mail: Invalid header: /tmp/motion/01-20130603192125-00.jpg
[1] File of type 1 saved to: /tmp/motion/01-20130603192125-01.jpg
mail: Invalid header: /tmp/motion/01-20130603192125-01.jpg
[1] File of type 1 saved to: /tmp/motion/01-20130603192126-00.jpg
mail: Invalid header: /tmp/motion/01-20130603192126-00.jpg
Should I try another mail client? Also is this only a configuration that PI can send several pictures in only 1 email? In my test I received 4 emails, I assume every email with 1 picture (in case it works 😉 )
Hey Mate,
Sorry about the late reply, been swamped with life.
Unfortunately without some scripting, motion will send an email per capture.
And I would try another client, I don’t know why yours would say invalid header…
Unless you check the options of your mail client, perhaps it has different arguments to attach files.
Hi,
Yea, similar over here 🙂
So I have tried Postfix but did not find a way to enter SMTP login details. I googled for some hints but didn´t find any.
I tried:
root@raspberrypi:/home/pi# echo ‘hi’ | mail -s Test name@domain.com
root@raspberrypi:/home/pi# send-mail: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postdrop: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
root@raspberrypi:/home/pi#
I liked sSMTP more…
or do I need to look somewhere into the depths of Postfix in order to set it up as smarthost with SMTP details?
thanks for the how to , works like a charm , any way of limiting the number of pictures sent when there is an event , im getting way to many emails of the same event .
thanks
derek k
Hi Dere
You can modify Motions settings to define what it sees as motion and raise the threshold.
Otherwise you would need to create a script that would get the last snapshot to send after it waits for a set period of time after motion has been detected
Hi. That’s what I figured. Thanks for your help
Hey, great tutorial!
Quick question, did you ever figure how to go about creating this script?
Fairly new to all of this, any help would be appreciated.
Cheers
Finally I got it working!!! As SMTP server I used sSMTP and mailutils as client. When I removed alsmost everything, set up sSMTP again and meirloom this time, it´s now sending emails including attached file. I guess mailutils was the error.
Awesome, good to hear !
same for me !!!!!!!!!!
HI thank you for this great tutorial everything work like a charm, i receive the mail too, but without the attachment so there isnt the picture
Can you paste the line that you’ve used in motion.conf ?
Thanks for the guide, but unfortunately it’s not working for me. I’m running wheezy and I’ve set up mailx that runs the
on_picture_save echo ‘webcam alert’ | mail -a %f -s “Webcam Alert”
command just fine on its own but motion won’t execute it. I’ve tried to put the code as a shell script and let motion run that, but no luck. Interestingly motion can run other shell scripts, ones that simply create files or such.
I’m very new to unix, is this some sort of permissions issue?
Have you tried emailing yourself with the mail command separately ?
Yes, I can email myself just fine, add attachments and everything. But for some reason, motion can’t execute anything that has to do with mail.
Tried getting motion to just email without attaching the file ?
Absolutely. Nothing happens, still. Other things execute just fine, like copying the output file to another folder.
I think the issue is how I’ve configured mailx. I’m not using postfix since I’ve configured mailx to use a gmail account. the configuration sits in home/pi/.mailrc, am I right to believe that motion or whatever user is using it won’t look there? in that case, where should I place the gmail account settings?
I’ve fixed it! I added my .mailrc settings to /etc/nail.rc
thanks for the guide
Awesome, great to hear 🙂
HELP!!!!!
I am new to the Pi I have had it for 6 months (and counting…) and understand all of what this is asking yet when i try to send a email it says
“send-mail: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postdrop: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol”
what shall I do can someone plzz help I’m trying to do this for my granddad so he can watch the birds wash themselves in the bird bath….
I’v tried the “mail” thing and it just says “No mail for pi”…
help please can some one help me!!!!!!!!!!!!!!!!!!!!!!!
Hello,
I followed your instructions but I am (and two more people above) the following error after I send a test email:
“send-mail: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postdrop: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol”
How can we fix this one?
Thank you.
Edit /etc/postfix/main.cf with your favourite text editor (e.g. sudo nano main.cf) and add inet_protocols = ipv4 to the end of the file.
http://www.samhobbs.co.uk/2013/12/raspberry-pi-email-server-part-1-postfix
I’m curious if you know how or if I could email an image every hour whether there’s motion detected or not.
Yes, that’s also possible in the motion configuration file.
I keep getting:
[1] File of type 8 saved to: /root/images/01-20140611002445.avi
[1] File of type 1 saved to: /root/images/01-20140611002445-01.jpg
&: 1: &: webcam alert: not found
[1] File of type 1 saved to: /root/images/01-20140611002446-00.jpg
&: 1: &: webcam alert: not found
[1] File of type 8 saved to: /root/images/02-20140611002616.avi
[1] File of type 1 saved to: /root/images/02-20140611002616-01.jpg
&: 1: &: webcam alert: not found
[1] File of type 1 saved to: /root/images/02-20140611002618-00.jpg
&: 1: &: webcam alert: not found
[1] File of type 1 saved to: /root/images/02-20140611002619-00.jpg
&: 1: &: webcam alert: not found
[1] File of type 1 saved to: /root/images/02-20140611002621-00.jpg
&: 1: &: webcam alert: not found
[1] File of type 1 saved to: /root/images/02-20140611002623-00.jpg
&: 1: &: webcam alert: not found
[1] File of type 1 saved to: /root/images/02-20140611002625-00.jpg
&: 1: &: webcam alert: not found
[1] File of type 1 saved to: /root/images/02-20140611002626-00.jpg
&: 1: &: webcam alert: not found
Here is what my motion conf is set to:
on_picture_save = “webcam alert” | mail -a %f -s “Webcam Alert” myemail@gmail.com
I can send test emails all day long with no problem.
Any ideas?
You ned to put echo before webcam alert
Hi,
Looks like my motion doesn’t fire any action on save or on detect events. I use postfix and have this in motion.conf:
on_picture_save echo ‘Motion detected’ | mail -s “Motion detected” mymail@gmail.com
on_motion_detected echo ‘Motion detected’ | mail -s “Motion detected” mymail@gmail.com
However this command works fine from command line.
I also tried this:
on_picture_save echo ‘Motion detected’ | mail -s “Motion detected” mymail@gmail.com > /tmp/test.log
But looks like no log file is created at all.
Any idea what could be wrong?
Thanks!
Rather than using mail first, try echoing out something to a text file e.g. on_picture_save echo ‘test’ > /tmp/test.log and see if that outputs something
Thanks for the tutorial! Super helpful.
I do receive the emails, but there are no attachments.
Any thoughts?
Make sure the mail client you’re using supports file attachments with the -a switch. The guide is written with
the heirloom-mailx
mail client in mind.[…] Source: http://sirlagz.net/2013/02/18/how-to-automatically-emailing-motion-snapshots/ […]
Hi, I am just getting started with using the pi, and I thank you for posting this tutorial. That said, I followed your instructions and when I attempt to send the test email I get this error;
pi@raspberrypi ~ $ send-mail: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postdrop: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
I assume I need to change the the address family, if that is the case how do I do that?
Warnings can normally be ignored. That’s just telling you that IPv6 isn’t enabled, which normally won’t stop things working.
I know it’s a quite old post but I’ve just tried this funny thing during these days and found 2 things:
it’s “-A %f” to attach file
and I also need to specify a sender to avoid the smtp server to reject my message (maybe because I don’t have configured postfix to specify one for me) with
‘-a “From: some@email.address“‘
The command line arguments will depend on your mail client and mail server configuration.
Hi and thanks for the tutorial, i can send mail with postfix but i can’t get the picture when motion detect a movement i don’t know why ? Someone can help ?
How have you configured motion? can you paste the configuration?
Hello! I’m running Motion as a service and I guess I have to change something so that Mutt sends the e-mails with the attachments. I’ve found the following command
if [ ! -z “$(ls %f|grep 4.jpg)” ]; then mutt -s “Motion detected” user@hotmail.com -a “%f” < /dev/null; fi
But it is not working. Unfortunately I don't understand it so I can change some parameters.
Hey,
it works but is it possible to attach all images in 1 mail?
on every motion it sends like 5-15 mails but only 1 image in mail
it whould be way easyer if they are all in 1 mail we can scroll to other images than in staid of opening all mails and look 😉
i’m using things line of code to send the mail
if [ ! -z “$(ls %f|grep 1.jpg)” ]; then mail -s “Motion Detected” mailadres@mail.be -A “%f” < /dev/null; fi
example filename:
25-20180511183713-01.jpg
23-20180511183533-01.jpg
22-20180511183530-01.jpg
etc are from the same event
i have another script that deletes the files older than 2min
i hope anyone has an idea
i'm getting crazy of all the mails 😉 if all included its ok 🙂
Yes, I’ve actually got it setup to do that. I’ll dig up the script and post it up sometime.