转载请注明出处:http://www.codelast.com/

Raspberry Pi是什么?
引用维基百科的一句话:

The Raspberry Pi is a credit card sized single-board computer developed in the UK by the Raspberry Pi Foundation with the intention of stimulating the teaching of basic computer science in schools.

简单地说,它就是一个基于ARM CPU的、信用卡那么大的迷你计算机。

由于我使用树莓派的场景大多数是在没有显示器、只用terminal连接它的情况下,所以,它的IP地址有时会在重启之后变掉(DHCP的),导致我无法通过terminal连接上它。然后我又要很麻烦地登录路由器的管理界面里,去看它被分配到的新IP是什么,然后用terminal重连,太麻烦了,不是么?作为一个树莓派玩家,这种麻烦简直是无法接受的!

为了解决这个问题,我让Pi开机的时候,自动向我指定的Email发送一封邮件,告诉我它此次开机时的IP地址。
步骤:开机时执行一个脚本,检测网络可用性→网络通畅后获取自己的IP地址→发送邮件到指定的邮箱。
下面一一道来。
文章来源:http://www.codelast.com/
『1』开机启动项
开机执行一个脚本是怎么做到的?
这篇文章的第2条里,详细陈述了如何让 /etc/rc.local 成为开机执行的文件,搞定之后,我只需要向此文件中添加一句话,即可开机执行一个脚本了:

# send a mail to notify the IP address of Pi 
/root/data/source/send-ip-mail.sh >> /root/data/source/send-ip-mail.log 2>&1

『2』上报IP地址的脚本实现
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

文章来源:http://www.codelast.com/
脚本很简单,分为3部分:第一部分检测网络可用性;第二部分取树莓派的eth0网卡的IP地址;第三部分发送邮件到指定的Email。
其中,第一部分是必须要有的,因为经过我试验,在本脚本执行时,树莓派的网络还没有初始化好,此时你直接发邮件是发不出去的。在这里我通过访问www.126.com来确定网络可用性。
第三部分需要你预先配置好mutt和msmtp。

『3』安装配置mutt和msmtp
配置好mutt和msmtp后,就可以像上面一样,通过一句代码将邮件发送出去。
首先要在Pi上安装mutt和msmtp:

pacman -S msmtp
pacman -S mutt

安装后,先配置msmtp。在你用户的根目录下创建文件 .msmtprc,内容如下:

account default
host smtp.126.com
from xxx@126.com
auth plain
user xxx@126.com
password your_password
logfile /var/log/msmtp.log

其中,smtp.126.com是我使用的邮箱的SMTP服务器地址,xxx@126.com是我用于发送邮件的邮箱,your_password是邮箱密码,你要根据你的情况修改。
文章来源:http://www.codelast.com/
然后配置mutt。在你用户的根目录下创建文件 .muttrc,内容如下:

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

其中,realname是发件人的名字,接收到的邮件中会显示出来。

『4』至此全部搞定,以后每次Pi开机的时候,就会“自报家门”,我们再也不愁找不到Pi啦!

[原创] 让树莓派自动上报IP地址到邮箱/Let Raspberry Pi to report its IP address via Email
Tagged on:                             

5 thoughts on “[原创] 让树莓派自动上报IP地址到邮箱/Let Raspberry Pi to report its IP address via Email

  • 2017 年 03 月 24 日 at 21:53
    Permalink

    hello,我在我的文章中引用了你的这篇文章一些内容,并做了声明,我的文章地址http://www.jianshu.com/p/893352c61f93,如果有侵权请告诉我,我会及时进行删除,谢谢~

    Reply
  • 2015 年 03 月 06 日 at 13:08
    Permalink

    直接設定static ip會比較方便

    Reply
    • 2015 年 03 月 08 日 at 22:33
      Permalink

      有些网络是不让个人设置静态地址的

      Reply
  • 2014 年 11 月 05 日 at 18:57
    Permalink

    可行,测试验证

    Reply

发表评论

电子邮件地址不会被公开。 必填项已用*标注