Raspberry Pi开发之旅-发送邮件记录时间及IP

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

为了解决这个问题,我让Pi开机的时候,自动向我指定的Email发送一封邮件,告诉我它此次开机时的IP地址。

步骤: 开机时执行一个脚本,检测网络可用性→网络通畅后获取自己的IP地址→发送邮件到指定的邮箱。

下面一一道来。

1、开机启动项

开机执行一个脚本是怎么做到的?

只需要向 /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脚本的内容如下:(vim不会自动创建指定目录)

#!/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" [email protected]

脚本很简单,分为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 [email protected]
auth plain
user [email protected]
password your_password
logfile /var/log/msmtp.log

其中,smtp.126.com是我使用的邮箱的SMTP服务器地址,[email protected]是我用于发送邮件的邮箱,your_password是邮箱密码,你要根据你的情况修改。

然后配置mutt。在你用户的根目录下创建文件 .muttrc,内容如下:

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

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

4、msmtp测试

测试配置文件:msmtp -P
测试smtp服务器:msmtp -S
[email protected]:~$ msmtp --host=smtp.163.com --serverinfo
SMTP server at smtp.163.com (smtp.163.gslb.netease.com [220.181.12.18]), port 25:
    163.com Anti-spam GT for Coremail System (163com[20121016])
Capabilities:
    PIPELINING:
        Support for command grouping for faster transmission
    STARTTLS:
        Support for TLS encryption via the STARTTLS command
    AUTH:
        Supported authentication methods:
        PLAIN LOGIN
This server might advertise more or other capabilities when TLS is active.

从返回信息中我们可以看到,这个smtp是支持TLS的,验证方式支持 PLAIN 和 LOGIN

5、测试邮件

命令行输入:

echo "test" |mutt -s "my_first_test" [email protected]

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

7、常见问题:

错误1:

msmtp: account default not found: no configuration file available
msmtp有bug,必须手动指定对应的配置文件
更改/etc/Muttrc中set sendmail="/usr/bin/msmtp"为set sendmail="/usr/bin/msmtp -C .msmtprc"
错误2:

msmtp: GNU SASL: Base 64 coding error in SASL library
遇到Base64 编码错误
更改~/.msmtprc中auth login
为 auth plain
错误3:

语句:echo "testtest"|mutt -F/home/spider/.muttrc -s "tttttttt" [email protected]
发邮件时提示:寄送讯息出现在错误,子程序已结束 127 (Exec error.).
无法寄出信件

一般是设置文件出现问题了,

先使用msmtp进行发送测试

[[email protected] ~]# /usr/local/msmtp/bin/msmtp -S
SMTP server at smtp.sohu.com ([220.181.90.34]), port 25:
    zw_71_37 ESMTP ready
Capabilities:
    STARTTLS:
        Support for TLS encryption via the STARTTLS command
    AUTH:
        Supported authentication methods:
        PLAIN LOGIN
This server might advertise more or other capabilities when TLS is active.

发现没有问题

再利用msmtp查看当前文件路径

[[email protected] ~]# /usr/local/msmtp/bin/msmtp -P
loaded system configuration file /usr/local/msmtp/etc/msmtprc
ignoring user configuration file /root/.msmtprc: No such file or directory
falling back to default account
using account default from /usr/local/msmtp/etc/msmtprc
host                  = smtp.sohu.com
port                  = 25
timeout               = off
protocol              = smtp
domain                = localhost
auth                  = LOGIN
user                  = zabbix2018
password              = *
passwordeval          = (not set)
ntlmdomain            = (not set)
tls                   = off
tls_starttls          = on
tls_trust_file        = (not set)
tls_crl_file          = (not set)
tls_fingerprint       = (not set)
tls_key_file          = (not set)
tls_cert_file         = (not set)
tls_certcheck         = on
tls_force_sslv3       = off
tls_min_dh_prime_bits = (not set)
tls_priorities        = (not set)
auto_from             = off
maildomain            = (not set)
from                  = [email protected]
dsn_notify            = (not set)
dsn_return            = (not set)
keepbcc               = off
logfile               = /var/log/zabbix/msmtp.log
syslog                = (not set)
aliases               = (not set)
reading recipients from the command line

从上面显示配置文件也没有什么问题,但是查看.muttrc时同时注意到双引号字符错误。修改键盘布局。

错误4:

[email protected]:~/Desktop/python$ sudo echo hello world | mutt -s "test mail" [email protected]

msmtp: authentication failed (method PLAIN)

msmtp: server message: 550 User is locked

msmtp: could not send mail (account default from /home/ding/.msmtprc)

Error sending message, child exited 77 (Insufficient permission.).

Could not send the message.

没有开启SMTP服务,新注册的用户默认好像是关闭的,一些邮箱是默认关闭smtp服务的,需要手动开启。

开启SMTP服务后,将163邮箱服务器发给的授权密码作为/home/ding/.msmtprc 文件中的password=授权码

参考:http://jingyan.baidu.com/article/3f16e003e327772591c1039f.html?st=2&os=0&bd_page_type=1&net_type=2

错误5:

[email protected]:/u1/str0101>mutt -s dfdf [email protected] <.tmp

Error sending message, child exited 69 (Service unavailable.).

Segmentation fault (core dumped)

邮件服务器限制,查看sent日志文件。(我由QQ更换为网易邮箱)

扩展:

使用标准pc104键盘

国内多使用标准104键盘,下面就开始树莓派的设置。

1、sudo raspi-config

2、进入国际化配置选项

3、修改键盘布局

4、选择PC104标准键盘

5、选择美国标准

6、选择键盘默认布局

7、compose key设置

8、ctrl+alt+backspace组合键,类似于windows的ctrl+alt+delete。

9、完成设置

时间: 2024-12-23 13:58:56

Raspberry Pi开发之旅-发送邮件记录时间及IP的相关文章

Raspberry Pi开发之旅-同步时间

使用htpdate同步时间 由于树莓派板子上没有 RTC 硬件和电池,因此树莓派上的系统时间重启是保存不了的.网上已经有人想到应对 NTP 被防火墙封掉类似的需求了,开源的 htpdate 命令直接使用 HTTP 协议来进行系统时间同步,项目主页在这里: https://github.com/iridium77/htpdate htpdate 的原理也非常简单,直接解析 HTTP 协议头中的服务器时间信息,然后设置本地时间,我们来看百度返回的 HTTP 头: HTTP/1.1 200 OK Da

Raspberry Pi开发之旅-实现云平台监控

一.基本设置 1 sudo raspi-config 移动到第五项"Enable Camera",回车进入,按tab键切换到"Enable"回车确认.回到主菜单,tab键切换到"Finish"回车确认.树莓派会自动重启. 或者执行命令手动关机 1 sudo shutdown -h now 警告!!!!!!!!!!!!!!!!!!!!!!!!!绝对不可以带着电源的情况下插入摄像头,如果带电操作,十之八九你的摄像头会GG,博主血泪教训.而且摄像头GG

Raspberry Pi开发之旅-WIFI遥控小车

一.简单介绍树莓派的GPIO口 上图是树莓派2代的接口(不同型号接口会有差异),我们就以此为例来说下这些接口. 1.GPIO介绍 GPIO 英文全称是:General-purpose input/output 通用型之输入输出的简称,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO).通过这些GPIO口,我们可以控制很多第三方的寄存器设备,简单来说我们可以通过这些I/O口控制一些芯片的电路.读取传感器的数值等. 2.所需材

Raspberry Pi开发之旅-土壤湿度检测

一.土壤传感器 传感器四个针脚:  针脚 含义 AO 模拟信号输出 DO 数字信号输出 GND 电源负极 VCC 电源正极 二.接线 YL-38和YL69 之间直接用2根母对母线连接. YL-38和树莓派之间VCC接1号针脚,GND接6号针脚,DO接11号针脚. 我们把VCC接到树莓派的DC3.3v输出上,我用的是PIN 01,GND接在任何一个接地端口上,我用的是PIN 06,DO输出接任何一个空闲的GPIO端口,我用的是11.如果不清楚树莓派端口布局的朋友可以参考这张图: 电源连通之后,电源

Raspberry Pi开发之旅-空气温湿度检测(DHT11)

一.首先,简单介绍下DHT11: DHT11是一个温湿度传感器,分为3个接口,分别为:VCC, DATA, GND  引脚号 名称 类型 说明 1 VCC 电源 +级,输入3V-5.5V 2 DATA 数据输出 输出引脚 3 GND 接地 接地引脚 之前看网上说,需要在DHT11VCC和DATA之间加一个电阻,经试验完全不需要. 二.引脚连接: 1.VCC接上3V,可以选择1口或者17口 2.DATA接上GPIO口,我选的是GPIO4,第7口 3.GND接上接地口,我选的是第14口 三.Pyth

Raspberry Pi开发之旅-远程监控

1.安装辅助工具 1 2 sudo apt-get install libjpeg8-dev sudo apt-get install cmake 2.编辑源文件 1 2 sudo git clone <a href="https://github.com/jacksonliam/mjpg-streamer" target="_blank">https://github.com/jacksonliam/mjpg-streamer<br><

基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警系统以及结合Zabbix监控的实现(一)

一.前期准备 达成目标:   利用Rapberry Pi 驱动MQ-2烟雾报警模块,对信息进行采集和提取,而后Zabbix监控系统来收集和处理信息采集到的信息.  1.准备树莓派(Raspberry Pi)一个 2.MQ-2有害气体检测模块 3.杜邦线若干 4.SD卡一张以及一个读卡器 二.各个器件介绍 1.树莓派(Raspberry Pi) ??Raspberry Pi是一个英国小型组织慈善组织The Raspberry Pi Foundation发行的一款针对电脑业余爱好者,学生,以及小型企

Raspberry Pi 4B C和Python开发环境安装

C编译环境wiringPi安装 安装步骤参照 wiringPi官网 目前针对Raspberry Pi 4B的版本是2.5.2 cd /tmp wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb 检查版本 gpio -v Python环境安装 sudo apt-get update sudo apt-get install idle-python2.7 原文地址

Raspberry Pi 摄像头模块应用程序文档翻译

http://dreamcolor.net/archives/raspicam-documentation.html —————————————————————————————————————————————————————————————————————— Raspberry Pi 摄像头模块应用程序文档翻译 更新日志: 2014 年 3 月 24 日更新:根据 2013 年 12 月更新的文档,对原译文进行扩展翻译.翻译完毕. 2014 年 3 月 4 日更新:根据 2013 年 12 月更