2010-08-02 17 views
5

Ni poplib ni imaplib parecen ofrecer soporte de proxy y no pude encontrar mucha información al respecto a pesar de mis intentos de google-fu.Python: ¿cómo puedo obtener correos electrónicos a través de POP o IMAP a través de un proxy?

Estoy usando python para buscar correos electrónicos de varios servidores habilitados para imap/pop y necesito poder hacerlo a través de proxies.

Idealmente, me gustaría poder hacerlo en python directamente, pero usar un contenedor (programa/script externo, basado en OSX) para forzar todo el tráfico a pasar por el proxy podría ser suficiente si no puedo encontrarlo algo mejor.

¿Alguien podría echarme una mano? No me puedo imaginar que soy el único que alguna vez necesitó buscar correos electrónicos a través de un proxy en python ...

** EDIT Editar título para eliminar HTTP, porque no debería escribir tan rápido cuando estoy cansado, perdón por esos muchachos **

Los proxies que planeo usar permiten calcetines además de http.

El trabajo de Pop o Imap a través de http no tendría mucho sentido (con estado frente a sin estado) pero tengo entendido que los calcetines me permitirían hacer lo que quisiera.

Hasta ahora, la única manera de lograr lo que quiero parece ser el hackeo sucio de imaplib ... preferiría evitarlo si pudiera.

+1

tengo curiosidad: ¿cómo podría hacer un túnel imap a través de un proxy http incluso sin Python? – hop

+0

Eliminado Http del título, mi error, significaba calcetines ... – Vermillon

Respuesta

0

Si te entiendo correctamente, estás tratando de poner una clavija cuadrada en un agujero redondo.

Un proxy HTTP solo sabe cómo "hablar" HTTP, por lo que no se puede conectar a un servidor POP o IMAP directamente.

Si desea hacer esto, necesitará implementar su propio servidor en alguna parte para hablar con los servidores de correo. Recibirá solicitudes HTTP y luego realizará las llamadas apropiadas al servidor de correo. Ej .:

Cómo práctica esto sería no sé ya que tendría que convertir un protocolo de estado en un stateless uno.

+0

Tienes 100% de razón, olvidé mencionar la capacidad de los calcetines. Eliminé HTTP del título, lo siento, estoy cansado; p – Vermillon

+3

El método 'CONNECT' de un proxy HTTP le permitiría ejecutar cualquier protocolo tcp cliente-> servidor. * SI * el proxy HTTP lo permite, la mayoría de las configuraciones predeterminadas restringen las solicitudes 'CONECTAR' al puerto 443. – MattH

+0

Entiendo lo que quiere decir, pero ¿cómo se conecta Thunderbird a través del proxy HTTP? –

4

respuesta a mi propia pregunta ... Hay una manera rápida y sucia para forzar tráfico desde un script en Python que pasar por un proxy sin problemas usando Socksipy (gracias MATTH por señalarme esa manera)

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

que anulan conexión global es, obviamente, un poco brutal, pero funciona como una solución rápida hasta que encuentre el tiempo para IMAP4 adecuadamente subclase y IMAP4_SSL.

+0

+1 también funciona para SMTP_SSL: D – alexandrul

+0

no funcionó, recibí "IOError: [Errno socket error] ('timed out',)", ¿alguna sugerencia? – ImadOS

Cuestiones relacionadas