[Cologne-pm] Fehler beim Versenden einer E-Mail

A. Pagaltzis pagaltzis at gmx.de
Wed Dec 14 08:01:23 PST 2005


* Karl-Heinz Kuth <khkuth at freenet.de> [2005-12-14 15:40]:
> Weiß ich welches Perlmodul in C kompiliert wurde oder auch in
> Abhängigkeit einer bestimmten Perlversion erstellt wurde?

Nein, musst du auch nicht wissen, du musst nur wissen, wo es
steht.

> Sorry, aber bei der Masse von Perlmodulen bin ich leicht
> überfordert.

Ich weiss das auch nicht auswendig. Ich habe nachgeschaut.
ZB. listet http://search.cpan.org/dist/Net-SMTP_auth/MANIFEST
keine .xs-Dateien auf, sondern nur ein .pm, enthält also nur
Perl-Code.

> Da schaue ich nur nach, gibt es das Modul für meine Perlversion
> oder nicht. Wenn nicht, dann habe ich erst mal Pech gehabt.

Wo steht denn so eine Information? Auf dem CPAN habe ich sowas
nirgends gesehen.

> Anyway, warum wird eigentlich immer gesagt mal soll use strict
> verwenden und in allen Beispielen in der Dokumentation fehlt
> dieses? Die meisten Beispiele in der Dokumentation sind sowieso
> nicht lauffähig. Kommen wir nicht ab des Weges.

Dass in 10-zeiligen Beispielsourcen oben kein `use strict;`
dransteht, ist wohl nicht weiter verwunderlich.

Dass die Beispiele oft kleine Fehler enthalten und deshalb nicht
direkt lauffähig sind, ist allerdings ein bekanntes Leid. Sie
werden halt fast nie debuggt. Es gibt ein paar Möglichkeiten,
das Testen von Beispielcode einzurichten, aber man muss sich
darum bemühen, und das tun leider nur wenige.

> Wieso läuft mein Skript nicht?

Was heisst »läuft nicht«: kompiliert nicht? Tut nichts? Bricht
mit Fehlermeldung ab? Computer explodiert?

Ich vermute, es tut einfach nichts gescheites. Die Net::SMTP-Doku
hat zu ->send() nämlich folgendes zu sagen:

    This initiates the sending of a message. The method recipient
    should be called for each address that the message is to be
    sent to.

Das tust du erst, nachdem du ->data() aufgerufen hast. Du
schickst du dem Server also erstmal einen Batzen irgendwelcher
Daten, die er garnicht erwartet, und bittest ihn erst dann, eine
Nachricht entgegenzunehmen; und das, ohne ihm jemals zu sagen,
wem er die Nachricht denn schicken soll.

Wie soll das funktionieren?

Der Beispielcode in der Doku zu Net::SMTP und auch zu
Net::SMTP_auth zeigt das jedenfalls in der richtigen Reihenfolge.

Ausserdem prüfst du dauernd $@, obwohl du keine eval()s im Code
hast. Wieso? Die Net::Cmd-Doku, auf die sowohl Net::SMTP_auth
sowie das dort erwähnte Net::SMTP verweisen, sagt mir auch nichts
von $@. Hast du da reingesehen?

Gruss,
-- 
#Aristoteles
*AUTOLOAD=*_;sub _{s/(.*)::(.*)/print$2,(",$\/"," ")[defined wantarray]/e;$1};
&Just->another->Perl->hacker;


More information about the Cologne-pm mailing list