2010-08-02 4 views
5

Weder Poplib noch Imaplib scheinen Proxy-Unterstützung zu bieten und ich konnte trotz meiner Google-Fu-Versuche nicht viele Informationen darüber finden.Python - Wie kann ich E-Mails über POP oder IMAP über einen Proxy abrufen?

Ich benutze Python, um E-Mails von verschiedenen imap/pop-fähigen Servern zu holen und muss es über Proxies tun können.

Idealerweise möchte ich in der Lage sein, es in Python direkt zu tun, aber mit einem Wrapper (externes Programm/Skript, OSX basiert), um den gesamten Verkehr durch den Proxy zu zwingen, könnte genug reichen, wenn ich nicht finden kann alles besser.

Kann mir jemand helfen? Ich kann mir nicht vorstellen, ich bin der einzige, der jemals E-Mails über einen Proxy in Python abrufen musste ...

** EDIT Titel bearbeiten, um HTTP zu entfernen, weil ich nicht so schnell tippen sollte, wenn ich bin müde, Entschuldigung für diese Jungs **

Die Proxies, die ich planen zu verwenden, erlauben Socken zusätzlich zu http.

Pop oder Imap Arbeit durch http würde nicht viel Sinn machen (Stateful vs Staatenlos), aber mein Verständnis ist, dass Socken würde mir erlauben zu tun, was ich will.

Bis jetzt ist der einzige Weg, um zu erreichen, was ich will, schmutziges Hacken von imaplib zu sein ... würde es lieber vermeiden, wenn ich kann.

+1

ich bin gespannt: Wie würden Sie imap über einen HTTP-Proxy sogar ohne Python tunneln? – hop

+0

Http aus dem Titel entfernt, mein Fehler, meinte Socken ... – Vermillon

Antwort

0

Wenn ich Sie richtig verstehe, versuchen Sie, einen quadratischen Pflock in ein rundes Loch zu setzen.

Ein HTTP-Proxy kann nur HTTP "sprechen", so dass er sich nicht direkt mit einem POP- oder IMAP-Server verbinden kann.

Wenn Sie dies tun möchten, müssen Sie Ihren eigenen Server irgendwo implementieren, um mit den Mail-Servern zu sprechen. Es würde HTTP-Anforderungen empfangen und dann die entsprechenden Aufrufe an den Mail-Server vornehmen. Z.B .:

Wie praktisch das weiß ich nicht, da Sie eine Stateful-Protokoll in ein stateless umzuwandeln wäre hätte.

+0

Sie haben 100% richtig, habe ich vergessen, Socken Fähigkeit zu erwähnen. Ich habe HTTP aus dem Titel entfernt, sorry dafür, ich bin müde, p – Vermillon

+3

Die "CONNECT" -Methode eines HTTP-Proxy lassen Sie jedes TCP-Client-> Server-Protokoll ausführen. * IF * der HTTP-Proxy erlaubt es, die meisten Standardkonfigurationen beschränken 'CONNECT' Anfragen auf Port 443. – MattH

+0

Ich verstehe, was Sie meinen, aber wie Thunderbird über HTTP-Proxy dann verbinden? –

4

Antwort auf meine eigene Frage ... Es gibt eine schnelle und schmutzige Art und Weise zu zwingen trafic von einem Python-Skript wickeln einem Proxy ohne Mühe, um durch Socksipy mit (vielen Dank Matth mich auf diese Weise für den Hinweis)

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

die globale Socket-Überschreibung natürlich ein bisschen brutal ist, sondern arbeitet als eine schnelle Lösung, bis ich die Zeit, um richtig Unterklasse IMAP4 und IMAP4_SSL finden.

+0

+1 es funktioniert auch für SMTP_SSL: D – alexandrul

+0

hat nicht für mich funktioniert, ich habe "IOError: [Errno Socket-Fehler] ('Zeitüberschreitung',"), einen Vorschlag? – ImadOS