好吧又是个不务正业系列


废话

一般用树莓派的时候都是ssh上去管理的,不插显示器什么的。这样就需要知道树莓派连接网络后的IP地址。
于是从网上找了个脚本可以实现在开机的时候把IP地址发到邮箱里。

需要用到muttmsmtp这两个东西。大家可以自行安装。

配置msmtp和mutt

在用户的根目录下创建文件.msmtprc,内容如下:

account default
host smtp.foxmail.com
from xxx@lightless.com
auth login
user xxx@lightless.com
password your_password
logfile /var/log/msmtp.log

具体的内容请根据自己的邮箱去更改。

在用户的根目录下创建文件.muttrc,内容如下:

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

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

发邮件脚本

整个脚本基本上是抄过来的,很简单。不过我对原来的脚本进行了一些更改,主要有设定了HOME变量(不然在执行计划任务/etc/crontab的时候有可能被覆盖掉,比如你的HOME应该是/root/,在crontab中有可能会出现HOME=/类似的代码将其覆盖,会导致邮件无法发送。),增加发送wlanIP(毕竟有时候是用WiFi接入的)。

#!/bin/bash
HOME='/root/'
# check network availability
while true
do
  TIMEOUT=5
  SITE_TO_CHECK="www.baidu.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)}'`
WLAN0_IP_ADDR=`ifconfig wlan0 | sed -n "2,2p" | awk '{print substr($2,1)}'`
BSSID=`iwconfig wlan0 | sed -n "1, 1p" | awk '{print $4}'`
# send the Email
echo "Current time: `date '+%F %T'`. Enjoy it! \nETH0 IP Address: $ETH0_IP_ADDR  \nWLAN0_IP_ADDR: $WLAN0_IP_ADDR \nBSSID: $BSSID" | mutt -s "IP Address of Raspberry Pi: $ETH0_IP_ADDR and $WLAN0_IP_ADDR" xxx@gmail.com

开机启动

这个简单,只要编辑rc.local文件就可以了,添加下面这句话。

/path/to/send-ip-mail.sh >> /path/to/send-ip-mail.log 2>&1

log文件一定要先存在才可以,不然会出现No such file or directory的错误。