2009-05-05 7 views
4

Я пишу скрипт Perl для подключения к IMAP-серверу, который требует TLS через порт 143. Сервер не поддерживает подключение через SSL. До сих пор модули Perl IMAP, которые я нашел, поддерживают только SSL, а не TLS.Есть ли модуль IMAP Perl с поддержкой TLS?

Есть ли модули Perl IMAP, которые поддерживают TLS? До сих пор я смотрел на:

Net :: IMAP Net :: IMAP :: Simple Net :: IMAP :: Client

Net :: IMAP :: Client поддерживает 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». С другой стороны, я был бы счастлив, если бы вы немного подробно описали, как я могу получить модуль IMAP с поддержкой TLS, используя вышеуказанные методы. –

+0

Сделайте свое сетевое соединение с io :: socket, а затем передайте это соединение на почту :: imapclient. Он не будет пытаться создавать свою собственную связь, а скорее использовать одно использование, сделанное для него. Это позволяет использовать любой механизм, который вы можете собрать. Это хорошо, потому что мы действительно не хотим, чтобы программисты mail :: imapclient изобретали колесо и работали с сетью. – hpavc

2

Да, но TLS! = SSL. Для работы TLS вам нужно создать простой сокет, обработать команду IMAP STARTTLS, а затем преобразовать ее в сокет SSL. В то время как IO :: Socket :: SSL может «обновлять» сокеты, как это, согласование STARTTLS является частью протокола IMAP и, следовательно, не «изобретает колесо» - вы делаете каждого пользователя клиентского модуля IMAP изобретать колесо чтобы обрабатывать эту часть протокола (включая любые другие биты и куски, например, незанятые события), которые появляются во время процесса, «вручную»!

Возможно, мне удастся открыть сокет, сбросить все полученные и просто отправить «STARTTLS \ r \ n» вниз, а затем вызвать start_SSL и надеяться на лучшее. Разумеется, проверка работоспособности отсутствует, если вы не сделаете это вручную, для чего вам придется искать RFC-запросы IMAP.

Mail :: IMAPClient имеет TLS погрузо-встраиваемый, хотя у меня были вопросы, связанные с многочастных сообщений в тех случаях, когда я только хочу, чтобы загрузить некоторые части - если вы захватывая все сообщение в любом случае это не будет дело. Однако для меня поиск продолжается!

+0

И я выяснил проблему с частями. В документации есть небольшая ошибка: чтобы получить идентификатор части объекта body-structure, используйте -> id _not_ -> bodyid, как задокументировано. – epitaph

+0

Mail :: IMAPClient - лучший почтовый модуль для меня. – MichielB

Смежные вопросы