树莓派开机发ip到邮箱

树莓派采用DHCP连接到局域网中,每一次登陆IP都会改变,虽说使用ipscan扫描局域网可以解决,但是非常麻烦。

经过一番搜索,终于找到了解决方案。资料来自(技术贴)如何让你的树莓派开机将ip发到你的邮箱

在实现过程中遇到了一些问题,应该是由于资料采用的python版本较早,而我采用的是3.4版本,所以会出现一些语法错误。

例如:print 在python2中是语句,在python3中是函数,所以 print ()  才是正确的。

python异常早期语句是: Exception,ex:   现在是 except Exception as e:

import socket
import fcntl
import time
import struct
import smtplib
import urllib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

def sendEmail(smtpserver,username,password,sender,receiver,subject,msghtml):
    msgRoot = MIMEMultipart('related')
    msgRoot["To"] = ','.join(receiver)
    msgRoot["From"] = sender
    msgRoot['Subject'] = subject
    msgText = MIMEText(msghtml,'html','utf-8')
    msgRoot.attach(msgText)
    smtp = smtplib.SMTP()
    smtp.connect(smtpserver)
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msgRoot.as_string())
    smtp.quit()

def check_network():
    while True:
        try:
            result=urllib.urlopen('http://baidu.com').read()
            print (result)
            print ("Network is Ready!")
            break
        except Exception as e:
            print (e)
            print ("Network is not ready,Sleep 5s....")
            time.sleep(5)
    return True

def get_ip_address():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("1.1.1.1",80))
    ipaddr=s.getsockname()[0]
    s.close()
    return ipaddr

if __name__ == '__main__':
    check_network()
    ipaddr=get_ip_address()
    sendEmail('smtp.163.com','发送邮件的邮箱(我采用的是163邮箱)','发送邮件的邮箱的密码','发送邮件的邮箱',['接收邮件的邮箱'],'IP Address Of Raspberry Pi',ipaddr)

以上代码只需修改发送邮箱和接收邮箱就可以在树莓派raspbain系统中使用,smtp.163.com是163的服务器,可以类似修改成其他服务器,不懂可搜索相关smtp资料。

接下来在/home/pi目录下执行python脚本

python send-ip.py

执行成功便可以收到邮件

再来将python添加到树莓派的开机启动中去

首先进入root账户(sudo -s)
cd /etc
nano rc.local
在fi后面添加这一行


python /home/pi/send_ip.py(此处与找到的资料不同)



重启树莓派(sudo reboot),邮箱就会有树莓派的ip了。

原文地址:https://www.cnblogs.com/Arvin-9/p/5050189.html