#python #python-3.x #automation #gmail
#python #python-3.x #автоматизация #gmail
Вопрос:
В общем, я создал скрипт на Python, который отправляет мне электронное письмо, содержащее мой общедоступный IP-адрес, каждые 12 часов. Моя цель — заставить его автоматически отправлять электронное письмо только при изменении моего 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-адреса вместо того, чтобы отправлять мне электронное письмо с, вероятно, одним и тем же IP-адресом каждые 12 часов.
Спасибо!
Комментарии:
1. Ваш скрипт отправляет сообщения каждые 12 минут, а не часов.
Ответ №1:
Это проверяет изменение общедоступного IP-адреса на любой интервал времени, который вы хотите, на основе значения, которое вы установили в x. Если ваш общедоступный 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...")
Комментарии:
1. Это именно то, что я искал. После того, как я опубликовал вопрос, я продолжил попытки и пришел к чему-то близкому к этому. Большое тебе спасибо, дурачок!