2010-08-02 31 views
5

Cả poplib hoặc imaplib dường như không hỗ trợ proxy và tôi không thể tìm thấy nhiều thông tin về nó bất chấp nỗ lực google-fu của tôi.Python - Làm cách nào để tìm nạp email qua POP hoặc IMAP thông qua proxy?

Tôi đang sử dụng python để tìm nạp email từ các máy chủ hỗ trợ imap/pop khác nhau và cần có khả năng thực hiện thông qua proxy. Lý tưởng nhất, tôi muốn để có thể làm điều đó trong python trực tiếp nhưng sử dụng một wrapper (chương trình bên ngoài/script, OSX dựa) để buộc tất cả lưu lượng truy cập đi qua proxy có thể là đủ nếu tôi không thể tìm thấy bất cứ điều gì tốt hơn.

Có ai cho tôi một tay không? Tôi không thể tưởng tượng tôi là người duy nhất từng cần tìm nạp email thông qua proxy trong python ...

** EDIT Chỉnh sửa tiêu đề để xóa HTTP, vì tôi không nên nhập quá nhanh khi tôi mệt mỏi, xin lỗi vì những kẻ đó **

Các proxy tôi dự định sử dụng vớ cho phép ngoài http.

Pop hoặc Imap hoạt động thông qua http sẽ không có ý nghĩa nhiều (stateful vs stateless) nhưng sự hiểu biết của tôi là vớ sẽ cho phép tôi làm những gì tôi muốn.

Cho đến nay, cách duy nhất để đạt được những gì tôi muốn dường như là hack hacking imaplib ... thà tránh nó nếu tôi có thể.

+1

Tôi tò mò: đường hầm của bạn sẽ truyền qua proxy http như thế nào ngay cả khi không có python? – hop

+0

Xóa Http khỏi tiêu đề, sai lầm của tôi, có nghĩa là vớ ... – Vermillon

Trả lời

0

Nếu tôi hiểu chính xác bạn đang cố gắng đặt một hình vuông vào một lỗ tròn.

Proxy HTTP chỉ biết cách "giao tiếp" HTTP để không thể kết nối trực tiếp với máy chủ POP hoặc IMAP.

Nếu bạn muốn thực hiện việc này, bạn sẽ cần triển khai máy chủ của riêng bạn ở đâu đó để nói chuyện với máy chủ thư. Nó sẽ nhận được các yêu cầu HTTP và sau đó thực hiện các cuộc gọi thích hợp tới Mail Server. Ví dụ .:

Làm thế nào thực tế này sẽ là tôi không biết kể từ khi bạn sẽ phải chuyển đổi một giao thức stateful thành một stateless một.

+0

Bạn đang 100% đúng, tôi quên đề cập đến khả năng vớ. Tôi đã loại bỏ HTTP khỏi tiêu đề, xin lỗi vì điều đó, tôi đang mệt mỏi, p – Vermillon

+3

Phương thức 'CONNECT' của một proxy HTTP sẽ cho phép bạn chạy bất kỳ giao thức máy khách -> tcp nào. * IF * proxy HTTP cho phép, hầu hết các cấu hình mặc định đều hạn chế các yêu cầu 'CONNECT' đối với cổng 443. – MattH

+0

Tôi hiểu ý của bạn là gì nhưng thunderbird kết nối thông qua proxy http như thế nào? –

4

trả lời cho câu hỏi của riêng tôi ... Có một cách nhanh chóng và dơ bẩn để buộc trang tải từ một kịch bản python phải đi qua một proxy mà không rắc rối bằng Socksipy (nhờ MattH đã chỉ cho tôi cách mà)

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

đó override ổ cắm toàn cầu rõ ràng là một chút tàn bạo, nhưng hoạt động như một sửa chữa nhanh chóng cho đến khi tôi tìm ra thời gian để IMAP4 đúng lớp con và IMAP4_SSL.

+0

+1 nó cũng hoạt động cho SMTP_SSL: D – alexandrul

+0

không làm việc cho tôi, tôi đã nhận "IOError: [Errno socket lỗi] ('hết thời gian',)", đề nghị nào? – ImadOS

Các vấn đề liên quan