所以基本上,我制作了一个python脚本,每12小时向我发送一封包含我的公共IP的电子邮件。我的目标是使其仅在IP更改时自动发送电子邮件。如果你们能给我一些帮助,我会喜欢的。
有我的代码:
from json import loads
from urllib.request import urlopen
import time
import smtplib
while True:
data = loads(urlopen("http://httpbin.org/ip").read())
print ("The public IP is : %s" % data["origin"])
try:
server_ssl = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server_ssl.ehlo()
server_ssl.login("fromemail@gmail.com", "password")
msg = """From: Automated Python Script <fromemail@gmail.com>
To: First Last <toemail@gmail.com>
Subject: SMTP e-mail test
""" + data["origin"] + """
"""
server_ssl.sendmail("fromemail@gmail.com", "toemail@gmail.com", msg)
print ("Successfully sent email!")
time.sleep(720)
except SMTPException:
print ("Something went wrong...")
顺便说一下,它在python 3中。
我真的希望它在我的公共IP发生变化时自动向我发送电子邮件,而不是每12小时向我发送一封可能具有相同IP的电子邮件。
谢谢!
答案 0 :(得分:0)
这将根据您设置为x的值来检查公共ip在所需时间间隔内的变化。如果您的公共IP频繁更改,则可以设置较低的x值;如果它不经常更改,则可以相应地进行设置
from json import loads
from urllib.request import urlopen
import time
import smtplib
data_prev = loads(urlopen("http://httpbin.org/ip").read())
prev_public = data_prev["origin"]
while True:
data_next = loads(urlopen("http://httpbin.org/ip").read())
next_public = data_next["origin"]
print ("The public IP is : %s" % data["origin"])
if(next_public != prev_public):
prev_publi = next_public
try:
server_ssl = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server_ssl.ehlo()
server_ssl.login("fromemail@gmail.com", "password")
msg = """From: Automated Python Script <fromemail@gmail.com>
To: First Last <toemail@gmail.com>
Subject: SMTP e-mail test
""" + data["origin"] + """
"""
server_ssl.sendmail("fromemail@gmail.com", "toemail@gmail.com", msg)
print ("Successfully sent email!")
time.sleep(x) # set x to whichever value you want
#time.sleep(720)
except SMTPException:
print ("Something went wrong...")