2010-08-02 3 views
5

Ни poplib, ни imaplib, похоже, предлагают поддержку прокси-сервера, и я не мог найти много информации об этом, несмотря на мои попытки google-fu.Python - Как я могу получать электронные письма через POP или IMAP через прокси?

Я использую python для получения электронной почты с различных серверов с поддержкой imap/pop и должен иметь возможность делать это через прокси.

В идеале, я хотел бы иметь возможность сделать это прямо в python, но с помощью оболочки (внешней программы/скрипта, основанной на OSX), чтобы заставить весь трафик пройти через прокси-сервер, может быть достаточно, если я не могу найти ничего лучше.

Может ли кто-нибудь дать мне руку? Я не могу себе представить, что я единственный, кто когда-либо нуждался в получении писем через прокси-сервер в python ...

** EDIT Редактирование заголовка для удаления HTTP, потому что я не должен набирать так быстро, когда я устал, извините за это ребята **

Прокси, которые я планирую использовать, разрешают носки в дополнение к http.

Pop или Imap работать через http не имеет смысла (с точки зрения состояния и без гражданства), но я понимаю, что носки позволят мне делать то, что я хочу.

До сих пор единственный способ добиться того, что я хочу, - это грязный взлом imaplib ... скорее избег бы его, если смогу.

+1

Мне любопытно: как бы вы туннелировали imap через прокси-сервер http даже без python? – hop

+0

Удалено Http из названия, моя ошибка, означала носки ... – Vermillon

ответ

0

Если я правильно вас понимаю, вы пытаетесь поместить квадратный штифт в круглое отверстие.

HTTP-прокси знает, как «говорить» HTTP, поэтому не удается напрямую подключиться к POP или IMAP-серверу.

Если вы хотите сделать это, вам нужно будет реализовать свой собственный сервер где-нибудь, чтобы поговорить с почтовыми серверами. Он получит HTTP-запросы, а затем вызовет соответствующие вызовы на почтовый сервер. Например .:

Как практические это будет я не знаю, так как вы должны преобразовать с учетом состояния протокола в stateless один.

+0

Ты на 100% прав, я забыл упомянуть о носках. Я удалил HTTP из названия, извините за это, я устал, p – Vermillon

+3

Метод «CONNECT» прокси-сервера HTTP позволит вам запускать любой протокол tcp client-> server. * IF * HTTP-прокси позволяет это, большинство конфигураций по умолчанию ограничивают запросы «CONNECT» на порт 443. – MattH

+0

Я понимаю, что вы имеете в виду, но как thunderbird подключается через HTTP-прокси? –

4

ответа на свой вопрос ... Там быстрый и грязный способ заставить Trafic из питона сценария, чтобы пройти через прокси-сервер без проблем, используя Socksipy (спасибо Matth для указывая мне, что путь)

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

Эта глобальная розетка переопределение, очевидно, немного брутальный, но работает как быстро исправить, пока я не нашел время, чтобы правильно подкласс IMAP4 и IMAP4_SSL.

+0

+1 он также работает для SMTP_SSL: D – alexandrul

+0

не работал для меня, я получил «IOError: [Ошибка сокета Errno] (« timed out »,)», любое предложение? – ImadOS