2009-05-05 53 views
4

我正在編寫一個Perl腳本來連接到需要通過端口143的TLS的IMAP服務器。服務器不支持通過SSL進行連接。到目前爲止,我發現的Perl IMAP模塊只支持SSL,而不支持TLS。是否有支持TLS的Perl IMAP模塊?

是否有任何提供TLS支持的Perl IMAP模塊?到目前爲止,我已經看過:

的Net :: IMAP 的Net :: IMAP ::簡單 的Net :: IMAP客戶端::

的Net :: IMAP客戶端::支持SSL,但不是TLS。

有什麼想法?

回答

2

您製作了一個後來轉換的非ssl套接字,「如果您想使用IO :: Socket :: INET替代方法,如IO :: Socket :: SSL,這也很有用。

http://search.cpan.org/dist/Mail-IMAPClient/lib/Mail/IMAPClient.pod#Socket

...當你在這裏創建你的方法參考...

http://metacpan.org/pod/IO::Socket::SSL#METHODS

這裏的例子可以很容易地調整

http://cpansearch.perl.org/src/SULLR/IO-Socket-SSL-1.24/example/ssl_client.pl

+0

恐怕我對此不夠了解,需要對需要編碼的代碼進行編碼。我真的在尋找一個提供內置此功能的模塊。換句話說,我想簡單地啓動一個IMAP連接並指定「TLS => 1」。 另一方面,如果您想更詳細地介紹如何使用上述方法來獲得具有TLS支持的IMAP模塊,我也會很高興。 – 2009-05-07 18:30:01

+0

使用io :: socket建立網絡連接,然後將該連接交給mail :: imapclient。它不會嘗試和建立自己的聯繫,而是使用爲之製造的一種用途。 這使您可以使用任何可以調整的機制。這是一件好事,因爲我們真的不希望mail :: imapclient程序員重新發明輪子並處理網絡問題。 – hpavc 2009-05-12 23:35:02

2

是的,但TLS!= SSL。對於TLS工作,您需要創建一個普通套接字,處理IMAP STARTTLS命令,然後將其轉換爲SSL套接字。雖然IO :: Socket :: SSL可以像這樣「升級」套接字,但是STARTTLS協商是IMAP協議的一部分,因此不會「重新發明輪子」 - 您正在使IMAP客戶端模塊的每個用戶都重新發明輪子必須處理在處理過程中出現的那部分協議(包括任何其他的碎片,例如空閒事件),「手動」!

我想可能是打開一個套接字,轉儲接收到的任何東西,然後發送「STARTTLS \ r \ n」,然後調用start_SSL並希望獲得最佳效果。當然,除非您手動執行此操作,否則無法進行檢查,因此您必須查看IMAP RFC。

的Mail :: IMAPClient已TLS處理內置的,雖然我已經處理的案件多的消息,我只是想下載某些部分的問題 - 如果你抓住了整個郵件反正這不會物。不過,對我而言,搜索仍在繼續!