当某些数据更改时,如何使python脚本自动发送电子邮件?

时间:2019-03-09 02:14:41

标签: python python-3.x automation gmail

所以基本上,我制作了一个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的电子邮件。

谢谢!

1 个答案:

答案 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...")