【问题标题】:How to make a python script automatically send an email when certain data is changed?当某些数据发生更改时,如何使 python 脚本自动发送电子邮件?
【发布时间】:2019-03-09 11:33:07
【问题描述】:

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

谢谢!

【问题讨论】:

  • 您的脚本每 12 分钟而不是几小时发送一次。

标签: python python-3.x automation gmail


【解决方案1】:

这会根据您设置为 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...")

【讨论】:

  • 这正是我正在寻找的。在我发布问题后,我继续尝试,我发现了一些接近这个的东西。非常感谢你!
猜你喜欢
  • 2011-09-16
  • 2020-11-03
  • 2018-02-01
  • 2015-04-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2015-01-16
相关资源
最近更新 更多