2014-07-10 2 views
0

SMTPlib를 사용하여 python을 사용하여 전자 메일을 보내려고합니다. 나는 표준 방식으로 하나의 이메일을 보낼 수있다. 이제 여러 개의 전자 메일을 보내려고하는데 로그인하지 않고 전자 메일을 보내기 전에 매번 서버를 종료하는 방법이 있어야합니다. 나는 다음을 시도했다. 나는 SendEmail 클래스에 모든 것을 감싸, 그 초기화에서 서버에 연결() 메소드 :여러 전자 메일을 보낼 때 smtplib 연결이 끊어졌습니다.

:

class SendEmail: 

def __init__(self): 
    self.username='[email protected]'; 
    self.password='password'; 
    self.server=smtplib.SMTP('smtp.mail.yahoo.com',587); 
    self.server.starttls(); 
    self.server.login(self.username,self.password); 

지금, 나는 여러 이메일을 보내, 클래스에 대한 SendAnEmail() 메소드를 사용하려고

def SendAnEmail(self,reciever): 
    message='blah'; 

    try: 
     self.server.sendmail(self.username,reciever,message); 
     print 'Message Sent' 
    except: 
     self.server.quit(); 
     self.server=None; 

클래스의 인스턴스를 선언하고 처음으로 SendAnEmail()을 호출하면 작동합니다. 두 번째로 호출하면 서버 연결이 끊어 졌다는 오류가 발생합니다. 클래스 인스턴스를 파괴하지 않았으므로 서버가 어떻게 분리됩니까? 그리고 그 주위에 어떤 방법이 있습니다. 이메일을 보낼 때마다 연결하고 로그인하고 종료해야합니까?

그래서, 주요 기능에 - 야후 그렇게 오래 기다리지 않습니다 (30 분?)하고 연결을 닫습니다

def main(): 
    mail0=SendEmail(); 
    mail0.SendAnEmail('[email protected]');#this works 
    time.sleep(60); 
    mail0.SendAnEmail('[email protected]');#this does not work 

답변

0

time.sleep(60)을 제거합니다.

다른 몇 가지 : 당신이 한 번에 여러 수신자에게 이메일을 보낼 수 있도록

  1. 파이썬이 라인
  2. sendmail()의 끝에 세미콜론이 필요하지 않습니다 수신자의 목록을 받아들입니다.
+0

그게 내가 가진 주요 질문입니다. SMTPlib 연결은 하나의 전자 메일 만 전송합니까? server.login()을 브라우저에서 이메일을 읽는 것과 비슷한 것으로 생각하고 있습니다. 로그인하는 곳, 이메일을 보내고, 로그 아웃 할 때까지 로그인 한 상태로 유지합니다. 그래서 server.login()은 그렇게 작동하지 않습니까? 파이썬이 세미콜론을 "필요로하지 않는다"는 것을 알고 있습니다. 그저 CPP 습관이 있습니다. 예, 여러 수신자도 할 수 있지만 클래스의 동일한 인스턴스에 대한 여러 호출간에 SMTP 연결이 끊긴 이유를 확인하고 싶습니다. – user3391754

+0

실제로 60 초 절전을 제거한 다음 동일한 SMTP 인스턴스에서 여러 개의 이메일을 보냈습니까? 당신은 그것이 효과가 있다는 것을 알게 될 것입니다. SMTP 서버는 연결을 영원히 열어 두지 않으며 활동이없는 경우 60 초 미만의 시간이 지나면 연결을 닫거나 로그 오프합니다. 약 30 초 정도입니다. 이 간단한 테스트를 스스로 시도 할 수 있습니다. – mhawke

+0

좋아, 나는 60 초의 수면을 변경하여 노력했다. 이 작동합니다. 고마워. – user3391754

관련 문제