使用 Python 将树莓派的 IP 发到邮箱

20131115223615279-0

本文来自 CDWEN 的投稿。由于树莓派的使用场景中大多数没有配备显示器,那么如何得知树莓派的 IP 地址以便通过 SSH 客户端访问呢?
之前有介绍过一种将树莓派 IP 地址发送到邮箱的实现方式,是通过 mutt 和 msmtp 来实现的。下面将介绍另一种方式,通过 Python 和邮件服务商的 SMTP 服务器来发送带有 IP 信息的邮件。

需要编写两个脚本,Python 邮件发送脚本 mail.py 和获取树莓派 IP 信息的脚本 ip.sh。

mail.py 内容如下:


#!/usr/bin/python 

#-*- coding:utf-8 -*-

import smtplib 

from email.mime.text import MIMEText 

import sys  

mail_host = 'smtp.exmail.qq.com'   #smtp地址如果不知可以百度如“163邮箱smtp地址”

mail_user = '邮箱账号'           #此账号密码是用来给人发送邮件的

mail_pass = '邮箱密码'			 #此账号密码是用来给人发送邮件的

mail_postfix = 'exmail.qq.com'   #邮箱地址,smtp地址删去smtp字符如“163.com”

 

def send_mail(to_list,subject,content): 

    me = mail_user+"<"+mail_user+"@"+mail_postfix+">" 

    msg = MIMEText(content) 

    msg['Subject'] = subject 

    msg['From'] = me 

    msg['to'] = to_list 

     

    try: 

        s = smtplib.SMTP_SSL() 

        s.connect(mail_host) 

        s.login(mail_user,mail_pass) 

        s.sendmail(me,to_list,msg.as_string()) 

        s.close() 

        return True 

    except Exception,e: 

        print str(e) 

        return False 

     

if __name__ == "__main__": 

        send_mail(sys.argv[1], sys.argv[2], sys.argv[3]) 

ip.sh 内容如下:


#!/bin/bash

sleep 10

wlan0=`ifconfig  wlan0 | head -n2 | grep inet | awk '{print$2}'`

eth0=`ifconfig  eth0 | head -n2 | grep inet | awk '{print$2}'`



if ping -c 2 -W 3 www.baidu.com &> /dev/null ;then

/home/pi/mail.py 收件人邮箱地址(不可与mail.py脚本中账号一致) "树莓派已经开机,成功获取到ip地址" "无线网络地址:$wlan0||有线网络地址:$eth0"

fi

假设脚本在 /home/pi/ 目录下,给脚本赋予执行权限。


sudo chmod +x /home/pi/ip.sh

sudo chmod +x /home/pi/mail.py

将脚本加入开机执行。

sudo vim /etc/rc.local

在 exit 0 之前加入下面一行

sudo /home/pi/ip.sh

重启树莓派,开机后等待一点时间,打开你的邮箱会收到一份树莓派的 IP 地址信息的邮件,知道 IP 之后可以更方便 SSH 连接到树莓派操作或进行 VNC 操作。

这是一篇发布于 5年 前的文章,其中的信息可能已经有所发展或是发生改变,请了解。


18 评论

  1. 感觉用不上啊,笔记本开热点就能查到IP,公用网络就不知道了,但既然是远程控制,还是用笔记本为多吧?

    • 哈哈,我就是这么搞的,一分钟判断一次IP变化,变化了就调API绑定域名,然后把IP发到邮箱

  2. 我也用到了这个功能,不过内网没什么用,可以做成DDNS服务,弄个动态域名绑上树莓派的服务器,每次IP变更的时候就发个邮件到自己邮箱,万一域名绑定失败还能用ip访问到

发表评论

你的邮件地址不会公开


*