问题
由于校园网,IP是动态分配的,因此需要获取树莓派的IP地址。
方案
1.开启客户端授权
我使用的是163邮箱,经过一系列验证,开启授权,并设置客户端授权密码
![客户端授权](https://i-blog.csdnimg.cn/blog_migrate/adb30800400df25e3a6990ac2b791999.png)
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