복붙노트

[PYTHON] 어떻게 프록시를 통해 POP 또는 IMAP을 통해 이메일을 가져올 수 있습니까?

PYTHON

어떻게 프록시를 통해 POP 또는 IMAP을 통해 이메일을 가져올 수 있습니까?

poplib 또는 imaplib도 프록시 지원을 제공하는 것 같지 않고 google-fu 시도에도 불구하고 이에 대한 많은 정보를 찾을 수 없습니다.

파이썬을 사용하여 다양한 imap / pop 지원 서버에서 이메일을 가져오고 프록시를 통해이를 수행 할 수 있어야합니다.

이상적으로, 나는 Python으로 직접 할 수 있기를 바랄 것이다. 그러나 랩퍼 (외부 프로그램 / 스크립트, OSX 기반)를 사용하여 모든 트래픽이 프록시를 통과하도록 강제하는 것은 내가 더 좋은 것을 찾지 못한다면 충분할 수도있다.

누구든지 내게 손을 줄 수 있니? 나는 파이썬에서 프록시를 통해 이메일을 가져와야하는 유일한 사람이라고 상상할 수 없다 ...

** 피곤할 때 너무 빨리 입력해서는 안되기 때문에 HTTP를 제거하도록 제목 편집을 편집하십시오. ** 그 사람들에게 미안 해요. **

사용하려는 프록시는 http 외에 양말을 허용합니다.

Pop이나 Imap은 http를 통해 작동하지 않습니다 (stateful vs stateless).하지만 양말은 내가 원하는 것을 할 수있게 해줄 것입니다.

지금까지 내가 원하는 것을 성취 할 수있는 유일한 방법은 imaplib의 더러운 해킹 인 것 같습니다 ... 가능한 경우에는 그것을 피하십시오.

해결법

  1. ==============================

    1.당신은 imaplib을 더러워 할 필요가 없습니다. socks4, socks5 및 http 프록시 (연결)를 지원하는 SocksiPy 패키지를 사용해 볼 수 있습니다.

    당신은 imaplib을 더러워 할 필요가 없습니다. socks4, socks5 및 http 프록시 (연결)를 지원하는 SocksiPy 패키지를 사용해 볼 수 있습니다.

    이런 식으로, 분명히 사용자 정의 __init__ 메소드에 대한 추가 인수를 통해 setproxy 옵션을보다 잘 처리하고 싶을 것입니다.

    from imaplib import IMAP4, IMAP4_SSL, IMAP4_PORT, IMAP4_SSL_PORT
    from socks import sockssocket, PROXY_TYPE_SOCKS4, PROXY_TYPE_SOCKS5, PROXY_TYPE_HTTP
    
    class SocksIMAP4(IMAP4):
        def open(self,host,port=IMAP4_PORT):
            self.host = host
            self.port = port
            self.sock = sockssocket()
            self.sock.setproxy(PROXY_TYPE_SOCKS5,'socks.example.com')
            self.sock.connect((host,port))
            self.file = self.sock.makefile('rb')
    

    IMAP4_SSL과 유사하게 할 수 있습니다. 그냥 그것을 슬슬 소켓에 포장으로 돌봐

    import ssl
    
    class SocksIMAP4SSL(IMAP4_SSL):
        def open(self, host, port=IMAP4_SSL_PORT):
            self.host = host
            self.port = port
            #actual privoxy default setting, but as said, you may want to parameterize it
            self.sock = create_connection((host, port), PROXY_TYPE_HTTP, "127.0.0.1", 8118)
            self.sslobj = ssl.wrap_socket(self.sock, self.keyfile, self.certfile)
            self.file = self.sslobj.makefile('rb')
    
  2. ==============================

    2.내 자신의 질문에 대답 ... Python 스크립트에서 Socksipy를 사용하여 번거 로움없이 프록시를 통과하도록 trafic을 강제 적용하는 빠르고 더러운 방법이 있습니다 (MattH에게 감사합니다)

    내 자신의 질문에 대답 ... Python 스크립트에서 Socksipy를 사용하여 번거 로움없이 프록시를 통과하도록 trafic을 강제 적용하는 빠르고 더러운 방법이 있습니다 (MattH에게 감사합니다)

    import socks
    import socket
    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS4,proxy_ip,port,True)
    socket.socket = socks.socksocket
    

    그 글로벌 소켓 오버라이드는 분명히 약간 잔인하지만, IMAP4와 IMAP4_SSL을 적절히 서브 클래스 할 시간을 찾을 때까지 빠른 수정으로 작동합니다.

  3. ==============================

    3.내가 너를 정확하게 이해한다면 네모 난 구멍에 둥근 구멍을 넣으려고한다.

    내가 너를 정확하게 이해한다면 네모 난 구멍에 둥근 구멍을 넣으려고한다.

    HTTP 프록시는 HTTP를 "말하는"방법 만 알고 있으므로 POP 또는 IMAP 서버에 직접 연결할 수 없습니다.

    이 작업을 원할 경우 메일 서버와 통신 할 수 있도록 자신의 서버를 구현해야합니다. HTTP 요청을 수신 한 다음 메일 서버에 적절한 호출을합니다. 예 :

    상태 저장 프로토콜을 무국적으로 변환해야하기 때문에 이것이 얼마나 실용적 일지 모르겠습니다.

  4. from https://stackoverflow.com/questions/3386724/python-how-can-i-fetch-emails-via-pop-or-imap-through-a-proxy by cc-by-sa and MIT license