Moin!
Hier noch eine interessante Lektüre
http://www.huschi.net/11_108_de-esmtp-dialog-smtp-auth.html
Die hat so ihre Detailfehlerchen. Denn der dargestellte Server unterstützt kein CRAM-MD5 laut seiner Liste.
Problem ist, dass smtp->auth() selbst keinen Fehler produziert.
Offenbar hast du versäumt, den Status von Net::SMTP abzufragen, wenn ich mir den Code der auth-Methode so ansehe.
Aus den Tiefen von SMTP.pm
sub auth {
my ($self, $username, $password) = @_;
eval {
require MIME::Base64;
require Authen::SASL;
} or $self->set_status(500,["Need MIME::Base64 and Authen::SASL todo auth"]), return 0;
Das ist natürlich jetzt klar.
Das Modul ist nicht in meiner ActiveState enthalten.
Welches Modul? Da werden zwei eingebunden.
damit fällt smtp->auth() als eine Methode für ein öffentliches Formmailer-Script dahin.
Mein Workaround erweist sich somit als sicher, sofern man ohne SASL leben kann.
Wenn deine Äußerungen sich auf das hier im Forum mal angesprochene Projekt "Formmailer neumachen" beziehen, dann ist die von mir geäußerte Kritik, dass dein Skript sich nicht um offerierte Auth-Methoden kümmert und die Authentisierung ohne Prüfung des Erfolgs durchführt, als schwerwiegend einzustufen.
Im praktischen Fall wird ja ein CGI-Formmailerscrpt nicht über das Internet auf einen fernen Server zugreifen.
Doch, genau das wird getan werden. Denn wenn das nicht notwendig wäre, würde man die schlichte Sendmail-Methode wählen, und alles wäre deutlich einfacher. Oder würde keine SMTP-Authentifizierung erfordern.
Das Szenario, welches du gerade bearbeitest, tritt sozusagen NUR dann auf, wenn ein Webserver selbst keinen direkten, unauthentifizierten Zugang zu einem Mailserver hat, und deshalb den Zugriff via Internet auf einen existierenden, aber gegen unautorisierte Fremdbenutzung abgesicherten Mailserver erfolgen muss. Gerade in so einem Szenario sollte die Sicherheit an allererster Stelle stehen - und das bedeutet für mich:
- Einsatz von SSL, sofern der Mailserver auf einem alternativen Port via SMTPS erreichbar ist.
- Einsatz von STARTTLS, sofern vom Mailserver angeboten.
- Warnung des Users, dass seine Mailzugangsdaten potentiell öffentlich lesbar über das Netz übertragen werden.
- Einsatz von verschleiernden Authentifizierungen wie CRAM-MD5.
- Wenn nichts anderes mehr geht: LOGIN oder PLAIN. Im Prinzip komplett ungeeignet, zumindest aber für alles, was das heimatliche Netzsegment des Webservers verlässt.
Die schlaue Lösung wäre, zu recherchieren, wo die fehlenden Module herzukriegen sind, damit smtp->auth() korrekt funktioniert.
- Sven Rautenberg