问题

由于校园网,IP是动态分配的,因此需要获取树莓派的IP地址。

方案

1.开启客户端授权

我使用的是163邮箱,经过一系列验证,开启授权,并设置客户端授权密码

客户端授权

2.获取IP并发送到自己邮箱

#!/usr/bin/python2.7
# -*- coding: UTF-8 -*-
import smtplib
import socket
from email.mime.text import MIMEText
from email.header import Header
#参数:服务器地址,开启授权的邮箱,授权密码(不是登录密码),接收方(建议填开启授权的邮箱),ip地址
def sendIP(server,user,pwd,receiver,ip):
    # 第三方 SMTP 服务
    mail_host = server  # 设置服务器
    mail_user = user  # 用户名
    mail_pass = pwd  # 口令

    sender = user
    receivers = [receiver]  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

    message = MIMEText(ip, 'plain', 'utf-8')
    message['From'] = Header("树莓派ip地址", 'utf-8')
    message['To'] = Header("测试", 'utf-8')

    subject = 'Python SMTP 邮件测试'
    message['Subject'] = Header(subject, 'utf-8')

    try:
        smtpObj = smtplib.SMTP()
        smtpObj.connect(mail_host, 25)  # 25 为 SMTP 端口号
        smtpObj.login(mail_user, mail_pass)
        smtpObj.sendmail(sender, receivers, message.as_string())
        print("邮件发送成功")
    except smtplib.SMTPException:
        print("Error: 无法发送邮件")

#获取本级制定接口的ip地址
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__' :
        ipaddr= get_ip_address()
        #我用的是163邮箱,因此服务器是smtp.163.com
        sendIP("smtp.163.com", "xxxx@163.com" , "xxxx", 'xxxx', ipaddr)

建议现在本地测试,成功后实装入树莓派。若收件箱没找到邮件,去垃圾箱找找看。代码部分取自“菜鸟教程”,感谢。

设置开机启动

sudo vim /etc/rc.local

在文件中添加自己脚本的地址,

cd /home/pi/DeskTop
./send_ip.py

这里可能会出现的问题:

  • 文件权限不够
sudo chmod 777 send_ip.py
  • 无法直接用./send_ip.py运行程序,原因是windows下的文件编码与linux下不太一样(我是偷懒传文件过去的 = =)

解决方案参考:/usr/bin/python^M: 解释器错误: 没有那个文件或目录(问题解决)

chmod a+x filename
vi filename
#命令模式下
:set ff 或 :set fileformat
fileformat=dos 或 fileformat=unix
#命令模式下
:set ff=unix 或 :set fileformat=unix
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐