如果在过去24小时内未发送,请发送电子邮件

时间:2014-01-29 19:11:13

标签: python email smtplib

我正在使用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小时内没有发送”的作品的帮助,我们将非常感激。

2 个答案:

答案 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,而是我所知道的所有日志消息。