2014-01-29 2 views
0

나는 블랙리스트와 비교하여 IP 주소를 검사하는 스크립트에서 일하고 있으며 목록에 IP가있는 경우에만 전자 메일을 보냅니다. 스크립트는 15 분마다 실행되도록 설정되지만 IP가 목록에 있고 전자 메일이 지난 24 시간 내에 전송되지 않은 경우에만 전자 메일을 보내도록 할 수 있습니다.
sentFolder = server.select("SENT",readonly=TRUE)이메일 보내기 지난 24 시간 동안 보내지 않았다면

오류 코드는 다음과 같습니다 : AttributeError: 'SMTP' object has no attribute 'select'

는 그 조각없이 (스크립트의 나머지 부분을 테스트 한 현재 코드 :에

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) 

내가로 실행 오류가 발생합니다 recentSent없이 < OneDayAgo 조각) 그리고 그것은 잘 작동하는 것 같습니다.

"지난 24 시간 내에 보내지 않으면 보낼 것"이라는 작품을 만드는 방법에 대한 도움은 정말 감사하겠습니다.

+0

'server.select()'가 무엇을 기대합니까? 문서가 어딘지를 찾았습니까? –

+0

@ Robᵩ 나는 이것을 [this] (http://stackoverflow.com/questions/5572589/python-forward-imap-email-with-attachments-imaplib-smtplib)에 근거하여 사용했다. –

+0

그 점에서, 'M'은 [imaplib.IMAP4_SSL'] (http://docs.python.org/2/library/imaplib.html) 객체입니다. 프로그램에서'server'는 ['smtplib.SMTP'] (http://docs.python.org/2/library/smtplib.html)입니다. 그들은 전적으로 무관합니다. –

답변

2

지난 24 시간 이내에 이메일을 보냈는지 확인하려면 이메일을 보내는 기록을 작성해야합니다. 이 정보를 텍스트 파일, IMAP 폴더, 데이터베이스, 웹 응용 프로그램 또는 기타 여러 가지 방법으로 저장할 수 있습니다. 이 데이터를 저장하는 방법은 디자인 결정입니다.

타임 스탬프가 로컬 파일의 수정 날짜에 저장되는 한 가지 가능성이 있습니다.

#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() 
+0

스크립트를 테스트 한 결과 스크립트 시작 부분에'import time'을 추가 한 후에 작동하는 것으로 보입니다. 감사. –

0

전자 메일이 최근 24 시간 내에 전송되었는지 여부를 확인하려면 스크립트를 프로그래밍하여 메일 서버 로그를 검사 할 수 있습니다. 사용중인 MTA는 언급하지 않았지만 로그 메시지를 안팎으로 알 수 있습니다.

관련 문제