Как заставить скрипт на Python автоматически отправлять электронное письмо при изменении определенных данных?

#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. Это именно то, что я искал. После того, как я опубликовал вопрос, я продолжил попытки и пришел к чему-то близкому к этому. Большое тебе спасибо, дурачок!