10
votes

Comment puis-je chercher des courriels via POP ou IMAP via un proxy?

ni POPLIB ou IMAPLIB ne semble offrir un soutien de proxy et je ne pouvais pas trouver beaucoup d'informations à ce sujet malgré mes tentatives Google-Fu.

J'utilise Python pour aller chercher des courriels à partir de divers serveurs compatibles IMAP / POP et devez pouvoir le faire à travers des proxies.

Idéalement, j'aimerais pouvoir le faire dans Python directement, mais à l'aide d'une enveloppe (programme externe / script, basé sur OSX) pour forcer tout le trafic à parcourir le proxy pourrait être suffisant si je ne trouve rien mieux.

Quelqu'un pourrait-il me donner une main? Je ne peux pas imaginer que je suis le seul à avoir besoin de chercher des courriels à travers un proxy en python ...

** Modifier le titre Modifier pour supprimer http, car je ne devrais pas taper si vite quand je suis fatigué, désolé pour ces gars **

Les proxies que je prévois d'utiliser permettent des chaussettes en plus de HTTP.

Le travail POP ou IMAP via HTTP n'aurait pas beaucoup de sens (énorme vs apatride) mais ma compréhension est que les chaussettes me permettraient de faire ce que je veux.

Jusqu'à présent, le seul moyen de réaliser ce que je veux être sale piratage de l'imaplib ... préfère l'éviter si je peux.


2 commentaires

Je suis curieux: comment voudriez-vous Tunnel imap via un proxy http même sans python?


Enlevé http du titre, mon erreur, signifiait des chaussettes ...


3 Réponses :


1
votes

Si je vous comprends correctement, vous essayez de mettre une cheville carrée dans un trou rond.

Un proxy HTTP sait uniquement comment "parler" http donc ne peut pas se connecter directement à un serveur POP ou IMAP directement.

Si vous souhaitez faire cela, vous devez implémenter votre propre serveur quelque part pour parler aux serveurs de messagerie. Il recevrait des demandes HTTP, puis effectuez les appels appropriés sur le serveur de messagerie. E.g.:

Comment ce serait pratique que je ne sais pas puisque vous devriez convertir un protocole d'état étalgieux en un apatride un.


3 commentaires

Vous avez 100% raison, j'ai oublié de mentionner la capacité de chaussettes. J'ai supprimé http du titre, désolé pour ça, je suis fatigué; p


La méthode 'Connect' d'un proxy HTTP vous permettrait d'exécuter n'importe quel protocole TCP Client-> Server. Si Le proxy HTTP le permet, la plupart des configurations par défaut restreignent les demandes "Connecter" au port 443.


Je comprends ce que tu veux dire, mais comment Thunderbird se connecte-t-il à travers le proxy http alors?



13
votes

Vous n'avez pas besoin de pirater la saleté imaplib. Vous pouvez essayer d'utiliser le package SOCKSIPY, qui prend en charge SOCKS4, SOCKS5 et HTTP Proxy (Connect):

Quelque chose comme ça, évidemment, vous voudriez mieux gérer les options SETProxy, via des arguments supplémentaires à un sur mesure __ init __ Méthode, etc. P>

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')


6 commentaires

Nice Trouvez Matth, c'est exactement le genre de chose que je cherchais (je ne savais pas que Socksipy). Je vais lui donner un aller. Merci.


@ Rafael-T Quel est la méthode create_connection () dans votre code? Où est-il mis en œuvre?


@ Всеволодтимченко: Cette mise en œuvre de SSL a été ajoutée par Rafael T, je ne suis pas sûr où il implique créer_connection vient de


@Matth Yeah, j'ai essayé d'adresser Rafael, mais SOF Moteur ne supporte évidemment pas de faire face à une personne qui a fait des modifications. Je pense que cette chose vient de Pysocks (ligne 150). Cette méthode doit être socks.create_connection . Merci pour la réponse cependant. Il y a aussi cette chose à propos de self.sock fermeture après avoir été enveloppé.


Il n'y a pas de chaussettes dans des chaussettes


Les paramètres Create_Connection ne correspondent pas à la fonction Create_Connection dans les chaussettes



7
votes

réponse à ma propre question ... Il y a une façon rapide et sale de forcer la trafic d'un script python pour passer par un proxy sans tracas avec Socksipy (merci Matth pour me pointer de cette façon) xxx

que le remplacement du socket global est évidemment un peu un peu Brutal, mais fonctionne comme une solution rapide jusqu'à ce que je trouve le temps nécessaire à la sous-classe IMAP4 et imap4_ssl correctement.


1 commentaires

Je n'ai pas travaillé pour moi, j'ai eu "Ioerror: [erreur de socket errno] (" expiré ",)", toute suggestion?