我正在使用Python编写一个脚本,该脚本根据黑名单检查IP地址,并仅在列表中显示IP时发送电子邮件。该脚本将设置为每15分钟运行一次,但如果IP在列表中并且在过去24小时内未发送电子邮件,我只希望它发送电子邮件。目前的代码:
import sys
import subprocess
import smtplib
import datetime
username = ''
password = ''
fromaddr = ''
toaddr = ''
server = smtplib.SMTP(host=,port=)
server.starttls()
server.ehlo()
server.esmtp_features["auth"] = "LOGIN PLAIN"
server.login(username,password)
sentFolder = server.select("SENT",readonly=TRUE)
recentSent = sentFolder["Date"]
OneDayAgo = date.today()-timedelta(days=1)
msg = ''
staticIPAddress = ''
dnsHostname = staticIPAddress + ".bl.spamcop.net"
p = subprocess.check_output("nslookup " + dnsHostname1,stderr=subprocess.STDOUT,shell=False)
if ('Non-existent' not in str(p) and recentSent < OneDayAgo):
server.sendmail(fromaddr, toaddrs, msg)
我遇到的错误发生在:
sentFolder = server.select("SENT",readonly=TRUE)
错误代码是:
AttributeError: 'SMTP' object has no attribute 'select'
我已经测试了脚本的其余部分(没有那个部分,没有recentSent&lt; OneDayAgo部分),它似乎工作正常。
任何有关如何制作“如果在过去24小时内没有发送”的作品的帮助,我们将非常感激。
答案 0 :(得分:2)
为了知道您是否在过去24小时内发送了电子邮件,您需要记录发送电子邮件的情况。您可以将该信息存储在文本文件,IMAP文件夹,数据库,Web应用程序或许多其他方式中。如何存储数据是您的设计决定。
这是一种可能性,其中时间戳存储在本地文件的修改日期中。
#UNTESTED EXAMPLE CODE
def create_timestamp():
with open("tsfile", "w") as fp:
fp.write("now")
def time_since_last_timestamp():
return time.time() - os.path.getmtime("tsfile")
...
if 'Non-existent' not in str(p) and time_since_last_timestamp() > 86400:
server.sendmail(...)
create_timestamp()
答案 1 :(得分:0)
要确定是否在过去24小时内发送了电子邮件,您可能需要对脚本进行编程以检查邮件服务器日志。您没有提到您正在使用的MTA,而是我所知道的所有日志消息。