>  기사  >  백엔드 개발  >  Python에서 smtplib를 사용할 때 주의할 점

Python에서 smtplib를 사용할 때 주의할 점

高洛峰
高洛峰원래의
2016-10-18 13:38:411619검색

smtplib를 사용할 때에는 열려 있는 서버의 연결을 닫는 대신 quit 메소드를 사용하여 연결을 닫는 것이 가장 좋습니다.

server.quit() #好
#server.close() #不好

종료하면 연결뿐만 아니라 세션도 종료되기 때문입니다. 이 세션은 연결을 확장하며 이 세션에서 반송이 발생하면 후속 문자에서 이상한 SMTP 프로토콜 오류가 발생합니다.

smtplib를 사용하면 매번 서버를 다시 열어도 DNS는 한 번만 해결됩니다. 이렇게 하면 도메인 이름에 여러 개의 smtp 서버가 있는 경우 로드 밸런싱 환경에서 사용할 수 있습니다. . smtplib의 Python 사용 프로그램은 항상 하나의 시스템을 사용하며 확장성에 영향을 미치는 로드 밸런싱 방법이 없습니다. 이를 위해 메일 서버 도메인 이름을 별도로 분석하여 모든 컴퓨터 이름을 얻은 다음 무작위로 SMTP 서버를 선택하여 연결하여 응용 프로그램 계층 부하 분산을 수행하는 아이디어입니다. Maoxing이 제공한 코드 덕분에 다음 코드 사용을 고려할 수 있습니다.

class smtp_server_factory(object):
    def _get_addr_from_name(self, hostname):
        addrs = socket.getaddrinfo(hostname, smtplib.SMTP_PORT, 0, socket.SOCK_STREAM)
        return [addr[4][0] for addr in addrs]
  
    def get_server(self, hostname):
        addrs = self._get_addr_from_name(hostname)
        random.shuffle(addrs)
        for addr in addrs:
            try:
                smtp_server = smtplib.SMTP(addr)
            except Exception, e:
                pass
            else:
                print addr
                return smtp_server
        return None

#Use

server=smtp_server_factory().get_server('xxx-mail.qq.com')


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.