python自动上报设备的ip到指定邮箱(python2.7)
1.发送邮件的账号需打开SMTP和其他有一些服务服务,以qq为例,需到设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 中设置。
2.这里使用到的包,python环境里面基本都有,没有的话,就需要先使用pip进行安装。若在python2.7中运行,请去掉所有中文信息,包括注解中的中文,sendip.py文件的具体实现:
#!/usr/bin/env python # -*- coding: utf-8 -*- # version <= python 2.7 # __author__ = 'Page Wong' import array import struct import socket import fcntl from datetime import datetime import smtplib from email.mime.text import MIMEText def get_ip_address(): #先获取所有网络接口 SIOCGIFCONF = 0x8912 SIOCGIFADDR = 0x8915 BYTES = 4096 sck = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) names = array.array('B', b'\0' * BYTES) bytelen = \ struct.unpack('iL', fcntl.ioctl(sck.fileno(), SIOCGIFCONF, struct.pack('iL', BYTES, names.buffer_info()[0])))[0] namestr = names.tostring() ifaces = [namestr[i:i + 32].split('\0', 1)[0] for i in range(0, bytelen, 32)] #再获取每个接口的IP地址 iplist = [] for ifname in ifaces: ip = socket.inet_ntoa(fcntl.ioctl(sck.fileno(), SIOCGIFADDR, struct.pack('256s', ifname[:15]))[20:24]) iplist.append(ifname + ':' + ip) return iplist def ip_save_file(iptxt): #获取当前时间,因为每次启动IP都在变,记录上时间容易区分 now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') ##写入文件 with open('ipaddress.txt', 'w') as f: f.write(now + '\r\n') for ip in get_ip_address(): f.write(ip + '\r\n') def ip_send_mail(iptxt): #收件人邮箱 toaddrs = '15522222222@163.com' #发件人邮箱 fromaddr = '2443922222@qq.com' #设置发件人账号 username = '2443922222@qq.com' #设置发件人密码(qq的这个密码是邮箱设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 里面生成的授权码,别的邮箱可能也有类似的坑) password = '11111111aaaa' #设置SMTP服务器(qq的服务器和端口如下,虽然SMTP默认的端口是25,但是估计每家都会有自己的操作,具体需查资料再填) smtp_sever = 'smtp.qq.com:587' server = smtplib.SMTP(smtp_sever) #设置邮件正文,get_ip_address()返回的是list,要转换成str ip = '\r\n'.join(iptxt) #设置邮件标题和正文 msg = MIMEText(ip, 'plain', 'utf-8') msg['Subject'] = 'IP For RaspberryPi' msg['From'] = fromaddr msg['To'] = toaddrs #启动SMTP发送邮件 server.ehlo() server.starttls() server.login(username, password) server.sendmail(fromaddr, toaddrs, msg.as_string()) server.quit() def main(): #获取IP iptxt = get_ip_address() #将IP存入文件,如果直接发送邮件,这步可以省略。 ip_save_file(iptxt) #将IP地址发送到指定邮箱 ip_send_mail(iptxt) #if __name__ == '__main__': # main() main()
3.使用 python sendip.py 执行脚本文件测试一下能不能发送邮件了。
4.配置开机启动。编辑文件 sudo nano /etc/rc.local 在文件内容 exit 0 的上面添加 python /home/pi/sendip.py > /home/pi/sendip.log 具体命令根据情况自己调整。具体情况如下图所示,图中信息除了我加的那句脚本,其他都是文件里面本来就有的信息。
5.重启机器,看是不是能成功发送ip到邮件。
发布者:songJian 点击数:1575 发布时间:2019-09-06 16:46:19 更新时间:2022-03-09 06:21:57
正在加载评论...