2009-05-05 15 views
4

Ich schreibe ein Perl-Skript, um eine Verbindung zu einem IMAP-Server herzustellen, der TLS über Port 143 benötigt. Der Server unterstützt keine Verbindung über SSL. Bisher haben die Perl-IMAP-Module, die ich gefunden habe, nur SSL und nicht TLS unterstützt.Gibt es ein Perl-IMAP-Modul mit TLS-Unterstützung?

Gibt es Perl-IMAP-Module, die TLS-Unterstützung bieten? Bis jetzt habe ich sah:

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

Net :: IMAP :: Client-SSL unterstützt, aber nicht TLS.

Irgendwelche Gedanken?

Antwort

2

Sie machen einen Nicht-ssl-Socket, der später transformiert wird, "Dies ist auch nützlich, wenn Sie IO :: Socket :: INET-Alternativen wie IO :: Socket :: SSL verwenden möchten."

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

... wenn Sie hier Ihre Methode Referenz erstellen ...

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

das Beispiel hier kann leicht

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

+0

Ich fürchte, ich verstehe nicht genug darüber zu programmieren, was codiert werden muss. Ich bin wirklich auf der Suche nach einem Modul, das diese Funktionalität eingebaut bietet. Mit anderen Worten, ich möchte einfach eine IMAP-Verbindung initiieren und "TLS => 1" angeben. Auf der anderen Seite wäre ich auch glücklich, wenn Sie in ein bisschen mehr Details genau auslegen würden, wie ich ein IMAP-Modul mit TLS-Unterstützung bekommen könnte, indem ich die oben genannten Methoden benutze. –

+0

Machen Sie Ihre Netzwerkverbindung mit io :: socket und übergeben Sie diese Verbindung dann an mail :: imapclient. Es wird nicht versuchen, eine eigene Verbindung herzustellen, sondern die Verwendung, die dafür verwendet wird. Damit können Sie den Mechanismus verwenden, den Sie aufbringen können. Das ist eine gute Sache, da wir nicht wollen, dass die mail: imapclient programer das Rad neu erfindet und sich mit Netzwerken beschäftigt. – hpavc

2

Ja, abgestimmt werden, aber TLS! = SSL. Damit TLS funktioniert, müssen Sie einen einfachen Socket erstellen, den Befehl IMAP STARTTLS ausführen und ihn dann in einen SSL-Socket umwandeln. Während IO :: Socket :: SSL solche Sockets "upgraden" kann, ist die STARTTLS-Negotiation Teil des IMAP-Protokolls und damit nicht "das Rad neu erfinden" - Sie lassen jeden Benutzer des IMAP-Client-Moduls das Rad neu erfinden mit diesem Teil des Protokolls (einschließlich aller anderen Bits und Teile, z. B. Leerlaufereignisse), die während des Prozesses auftauchen, "manuell" umgehen zu müssen!

Ich denke, es könnte möglich sein, einen Socket zu öffnen, alles empfangen und einfach "STARTTLS \ r \ n" runter zu senden, dann start_SSL aufrufen und auf das Beste hoffen. Natürlich gibt es dort keine Überprüfung der Fähigkeiten, es sei denn, Sie tun dies manuell, für die Sie sich die IMAP-RFCs ansehen müssten.

E-Mail :: IMAPClient hat TLS-Handhabung eingebaut, obwohl ich Probleme mit mehrteiligen Nachrichten in Fällen hatte, wo ich nur bestimmte Teile herunterladen möchte - wenn Sie die ganze Nachricht greifen wird dies sowieso nicht Angelegenheit. Für mich geht die Suche jedoch weiter!

+0

Und ich habe das Problem mit Teilen herausgefunden. Es gibt einen kleinen Fehler in der Dokumentation: Um die ID eines Teils des Körpers-Struktur-Objekts zu erhalten, verwenden Sie -> ID _not_ -> bodyid wie dokumentiert. – epitaph

+0

Mail :: IMAPClient ist das beste Mail-Modul für mich. – MichielB