代碼如下:
import subprocess
import smtplib
from email.mime.text import MIMEText
subp = subprocess.Popen('curl ip.cip.cc',shell=True,stdout=subprocess.PIPE)
subp2 = subprocess.Popen('cat getip.txt',shell=True,stdout=subprocess.PIPE)
new_ip=subp.stdout.readline().decode().strip()
old_ip=subp2.stdout.readline().decode().strip()
if new_ip == old_ip :
f = open("getip.txt","w")
print(old_ip,file=f)
else:
mailserver = "smtp.qq.com"
usersname_send = '[email protected]'
password = 'qqqqqqqq' #授權碼
username_recv = '[email protected]'
mail =MIMEText(new_ip)
mail['From'] = usersname_send
mail['To'] = username_recv
smtp = smtplib.SMTP_SSL(mailserver,port=465) #qq的smtp服務端口是465
smtp.login(usersname_send,password)
smtp.sendmail(usersname_send,username_recv,mail.as_string())
smtp.quit()
f = open("getip.txt","w")
print(new_ip,file=f)
解釋:
這裏我的思路很簡單,使用python執行系統命令,判斷ip是否相等也就是公網ip有無變化,有變化就發郵箱並且存入指定文本,如果沒變化就把舊地址繼續寫入一遍
主要記住幾個點:
一:
去除輸出字符中的轉移字符
我輸出字符的時候是這樣的:b’192.168.1.1/n’,去除字符使用.decode().strip()
即可
二:
執行系統命令
我看了下,python執行系統命令有好幾個方法,有一篇優秀的帖子Python3 執行Linux Bash命令
,大家可以查閱。我這裏使用subprocess底層調用Popen執行系統命令,很好用,很舒服
三:
發送郵件我選擇的比較簡單的一種
沒有發送附件等那些要求,只要對應的郵件服務支持免費開啓smtp服務就可以用。還有更簡單的一兩句話就可以發送郵件的是一個github項目,叫做yagmail。可以自行研究使用