树莓派开机后自动发送邮件上报IP地址

树莓派3自带了WiFi,所以一般买来之后插上电配置好WiFi就扔在一个地方不用管了.但是在有些地方获取树莓派的IP确实是比较麻烦的一件事,比如用的是学校的网络,学校每天会断网,或者使用的是租房的网络,不知道路由器密码的情况.这时,如果能够有一种方法让树莓派自动发送IP地址给我,将是一件特别方便的事情.我使用的是通过发邮件的方式,让树莓派每次启动之后自动发送邮件将IP发给我,我在手机上查看就好.

配置msmtp和mutt自动发送邮件

发送邮件的原理我也懂得不多,主要是参考的网上的教程,我参考的是这一篇:[原创] 让树莓派自动上报IP地址到邮箱.作者写的很清楚,不过这篇文章是在Arch系统下面配置的,我是用的Raspbian系统,所以我简单说下我的配置过程,给使用Raspbian的同学参考.步骤还是尽量按照原文中的步骤:)

1.安装msmtp和mutt

一句话介绍下这两个软件分别是做什么的:
mutt: 是一个Linux下的邮件程序,Mutt 更像一个文件管理器,只不过它管理的是email。它的功能是借助各个其他的程序来实现的
msmtp: 是Linux下一个非常简单易用的smtp客户端。利用这个我们便可以发送邮件。
(这两句话引用自此,表示感谢)

Debian系列装软件很方便,直接apt就可以.

sudo apt install msmtp
sudo apt install mutt

这两个软件都不大,应该很快就能装好.

2.配置msmtp和mutt

装好软件之后,要分别为这两个软件编辑配置文件.这里的配置方法与参考文章中稍有不同,我当时在这里困惑了好久才搞定.
首先,配置文件的内容和参考文章基本相同.先配置msmtp,在用户的根目录下新建文件.msmtprc,内容如下:

account default
host smtp.aliyun.com
from 你的邮箱地址
auth plain
user 你的邮箱地址
password 你的邮箱密码
logfile /var/log/msmtp.log

这里我对配置文件的内容稍微解释一下.需要我们自己修改的主要是host,from,user,password和logfile这几项.

  • host 你的邮箱的SMTP服务器地址,可以在邮件的网站上查到,我用的阿里云的邮箱,所以是aliyun.com后缀
  • from 这里是发件人地址,在收件方会显示,设置成你给树莓派申请的邮箱地址
  • user 这里是用户名,网上有用户说这里设置邮箱的用户名即@符号前面的字符串就可以,我没有尝试,还是设置的我的邮箱地址,建议先使用邮箱地址,配置成功之后可以自己进行修改
  • password 这个就是自己邮箱的密码,没什么好说的,但是这里是明文密码,要注意保密:)
  • logfile 这是msmtp的程序运行日志文件路径,需要自己创建,msmtp自己不会创建.在发送邮件之后程序会把发送日志写到这个路径的文件里,这里的路径是在/var下面,我前几次使用的时候都由于没有写权限而不能把日志写进去,所以如果你也使用Raspbian并且不是root用户的话你也应该会遇到权限问题写不进去,这里要修改下文件所有者,使用chown命令把这个文件修改为pi用户所有就OK了.当然你也可以选择在根目录下自己建立一个文件作为log文件,那样也不会有权限问题.

这里要说明的一点是由于在这个文件中密码是明文保存,msmtp考虑到安全问题,会要求强制设置文件访问权限为600,所以在写好配置文件之后,需要手动修改文件权限为600,使用命令: chmod 600 .msmtprc.另外说下我在这里遇到的一个经验,我在最开始给树莓派申请邮箱的时候使用的是网易163的邮箱,但是配置之后,进行发送的时候总是报错发送失败,原因是邮箱服务器响应554,认为我的邮件不合法.我开始还以为是我配置出错了,后来换了邮箱试了下才知道是网易邮箱的监测机制太严格了,拒绝接受发送请求,不是我的设置的错误.这里让我浪费了2天的时间,所以后来申请阿里邮箱之后,尝试发送成功才知道我的配置没问题.如果有人在这里遇到发送失败,并且错误码也是服务器拒绝的话,建议尝试一个其他邮箱试试,说不定是邮箱服务器端的问题.
下面配置mutt的文件,同样在用户根目录下新建文件.muttrc,内容如下:

set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="RaspberryPi"
set editor="vim"

这里我也对配置文件解释一下,配置不多,就4条.

  • sendmail 这个是用来发送邮件的程序,mutt其实是一个上层应用,负责编辑邮件内容和添加附件,实际发送要依赖别的发送程序.这里我们使用的是msmtp,就在这里写msmtp的路径.查看msmtp的路径可以用命令whereis msmtp.最后要注意msmtp路径名要用双引号引起来.
  • use_from 按我的写就行.说实话,这个我也不知道是什么意思~
  • realname 这个是发送邮件之后,收件方显示的发件人的名字,注意也要用引号引起来
  • editor 这个是使用mutt写邮件的时候默认的编辑器.我是emacs用户. ##

一共配置的内容就这么多,很简单.配置完之后就可以试着发一封邮件了,发送命令为:

echo “hello world” | mutt -s “title” xxx@gmail.com

其中echo后面的内容是邮件的正文,mutt -s 后面的引号内是邮件的主题,xxx@gmail.com是收件人的地址.如果配置没问题的话,你的邮箱应该能收到邮件了,下一步我们要设置树莓派在开机之后自动获取IP地址并发送邮件.

3.设置树莓派开机自动提取IP地址并发邮件给指定用户

前面写了这么多,看起来已经离完成一步之遥了,但是我还是在这里被坑了2天,这里遇到的问题也是促使我写这篇文章的原因.一步步来说.按照参考文章的内容,我直接用的他的shell脚本去检测网络是否通畅,然后获取IP地址并发邮件,这个文章的作者写的很棒,我把脚本拿来直接就可以用,我也就不针对脚本详细去解释了.在这里我再把这个脚本copy一遍,当做原文的备份吧.
send-ip-mail.sh脚本的内容如下:

#!/bin/bash
# check network availability 
while true
do
TIMEOUT=5
SITE_TO_CHECK="www.126.com"
RET_CODE=`curl -I -s --connect-timeout $TIMEOUT $SITE_TO_CHECK -w %{http_code} | tail -n1`
if [ "x$RET_CODE" = "x200" ]; then
echo "Network OK, will send mail..."
break
else
echo "Network not ready, wait..."
sleep 1s
fi
done
# get the IP address of eth0, e.g. "192.168.16.5" 
ETH0_IP_ADDR=`ifconfig eth0 | sed -n "2,2p" | awk '{print substr($2,1)}'`
# send the Email 
echo "Current time: `date '+%F %T'`. Enjoy it" | mutt -s "IP Address of Raspberry Pi: $ETH0_IP_ADDR" xxx@gmail.com

这里再唠叨一下,这个脚本中获取的是eth0的IP地址,如果你使用的是WiFi的话,那么要改成wlan0,我自己就是用的WiFi.还有获取IP地址这一句,这个脚本中的命令是没问题的,但是我偶然发现了一个更简洁的命令,是在/etc/rc.local里面,树莓派的这个文件中都默认有一个获取IP的shell语句,是IP=\hostname -I` `可以自己修改下,更加简洁~
脚本写好之后,添加可执行权限,然后直接运行一遍,看看是否可以正常发送邮件,并打印log到指定文件中.如果有问题,参考log返回的信息加Google,应该很快可以解决.

4.我的经验:用户执行权限问题

下面就是添加开机自动执行了,前面已经提到过,在Raspbian系统中,把要执行的命令或者脚本写到/etc/rc.local文件中就OK了,按道理来说树莓派就可以按照我们的想法,开机等待获取IP,然后发送邮件.参考的文章也是到这里就结束了.但是我在执行完这些之后,重启路由器却没有收到树莓派发到的邮件,然后我尝试登录进去手动执行这个脚本就可以发送成功,甚至我把/etc/rc.local里面的这条脚本执行语句拷出来执行都可以发送成功.但是就是在树莓派自动执行时却不会收到邮件,我检查了发送日志确实有等待网络畅通的语句,也有发送成功的语句.我还在这里添加打印语句调试了好久.最终在网上浏览别的信息的时候发现的一句话提示了我:用户权限问题.原来是我上面配置.muttrc和.msmtprc的时候都是在用户的根目录下配置的,也就是pi用户的家目录中,所以我手动以pi身份执行的时候是成功的,因为msmtp和mutt都匹配到了正确的配置文件.但是在开机自动执行的时候,执行的用户变成了root用户,这时两个程序会去root的家目录下寻找配置文件,这当然找不到,所以就会发送失败,但是我却看不到发送失败的原因,并且手动执行的话还能成功.这个原因实在是难以想到.最后我的解决办法是复制了一份两个程序的配置文件到/root目录下面,然后用root用户手动发送一次,确认能发送成功,然后再重启一遍,就能看到树莓派自己也可以发送了.还有一个解决办法是msmtp和mutt都支持全局的配置文件,好像是/etc/Msmtprc/etc/Muttrc,但是我没有尝试这种方法.我想如果使用全局配置文件的话,可能也就不会遇到我的这个问题了.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容