2014-11-11 2 views
0

전자 메일 클래스가 테스트되었으며 유효한 자격 증명이 사용 중일 때 전자 메일을 보낼 수있는 기능이 있습니다. 문제는 여러 프로토콜을 뒤틀린 상태에서 사용할 때입니다. 예를 들어 프로토콜이 메일을 뒤 틀고 꼬인 DNS 또는 트위스티드 IRC 일 때프로그램이 전자 메일을 보낸 후 끝났습니다

작성된 코드는 끝없이 실행되며 이벤트가 트리거되면 DNS가 올바른 도메인을 확인할 수 없거나 DNS 서비스가 작동하지 않는 등의 문제를보고하는 이메일을 받고 싶습니다.하지만 전자 메일을 수신하면 프로그램 종료 (반환 코드 0), 그러므로 클래스 전자 메일에는 내가 잘못 인도 한 코드 조각이 포함되어 있어야합니다. 이미 API를 확인했지만 누락 된 부분에 대해서는 단서가 없습니다.

내가 이메일을 보내 현재 사용하고 클래스 : 당신은 resultDeferred 화재 후 프로그램을 중지 할 reactor.stop를 호출

class Email: 
def __init__(self): 
    threading.Thread.__init__(self) 
    self.smtp_server = "SMTP" 
    self.user_name = "[email protected]" 
    self.user_password = "MAIL_PASSWORD" 
    self.portTLS = 587 
    self.portSSL = 465 

def sendEmail(self, m): 
    contextFactory = ClientContextFactory() 
    contextFactory.method = SSLv3_METHOD 

    resultDeferred = Deferred() 
    senderFactory = ESMTPSenderFactory(
    self.user_name, 
    self.user_password, 
    self.user_name, 
    m.to, 
    m.text, 
    resultDeferred, 
    contextFactory=contextFactory) 

    reactor.connectTCP(self.smtp_server, self.portTLS, senderFactory) 
    resultDeferred.addCallbacks(self.cbSentMessage, self.ebSentMessage) 
    return resultDeferred 

def cbSentMessage(self, result): 
    print "Message sent" 
    reactor.stop() 

def ebSentMessage(self, err): 
    err.printTraceback() 
    reactor.stop() 

답변

0

. 그렇게하지 않으면 프로그램이 더 이상 종료되지 않습니다.

(또한,이 threading.Thread.__init__에 대한 호출을 제거해야한다, 그것은 불필요하고 거의 확실히 다른 버그의 원인이됩니다.)

0

예 사용자 문양이 지금은 질문을했다하는 바보 같은 느낌 얻을, 옳았다 지금 : 함수이기 때문에 다른 하나는 모든 necesary하지 않다에

def cbSentMessage(self, result): 
    print "Message sent" 

'' '(이 용액 따라서 이러한 함수로서 지금 콜백 함수에)합니다 (reactor.stop 제거

이었다 오류가 trigerred 때 불리는, 그러나 나는 어쨌든 그것을 바꾼다 :

def ebSentMessage(self, err): 
    err.printTraceback() 
관련 문제