Hi Chräcker,
fangen wir mal damit an, daß Du in Deinem Skript gleich als allererstes (!) einen eigenen HTTP-Header ausgibst. Dann kracht nämlich nicht das Skript zusammen, wenn irgendwas innerhalb des Skripts schief geht.
Denn genau das passiert im Moment:
malformed header from script. Bad header=No valid From Header
Wer könnte das denn wohl sein, der einen "From"-Header vermißt?
Sendmail, denke ich - wer auch sonst?
Dein Skript läuft also bis zum Versenden tadellos. An dieser Stelle rufst Du sendmail aber erstens nicht so auf, wie der das haben will, zweitens aber so, daß Du seine Ausgaben gnadenlos nach stdout leitest.
Dort jedoch muß die Ausgabe des CGI-Skripts hin - und die hat gefälligst mit einem korrekten HTTP-Header anzufangen!
Ein solcher ist diese Fehlermeldung von Sendmail jedoch nicht - knirsch(500).
Also:
print "Content-type: text/html\n\n"
ganz oben (Zeile 2 oder so) rein, und die Sendmail-Fehlermeldung wird danach immerhin schon mal keinen internen Server-Fehler mehr auslösen (sondern einfach nur im Browser-Fenster landen, als "Dokument").
Als nächstes könntest Du versuchen, sendmail so aufzurufen, daß Du seine Ausgaben nicht mehr nach stdout durchreichst, sondern sie auffängst. Schau Dir mal die "backticks" in Perl an, damit könntest Du die Ausgabe eines Programms in eine Perl-Variable umnleiten. Was Du dann damit anfängst, ist Deine Sache. (Das ist aber "Kür", nicht "Pflicht".)
Außerdem: SelfHTML 8.0 ist in zwischen voll von
use strict;
use CGI::Carp qw(fatalsToBrowser);
- nur dieser olle Form-Mailer weiß davon noch nichts.
Das sollte man vielleicht mal langsam ändern. ("Carp" hätte implizit eine ähnliche Wirkung wie der von Dir statisch ausgegebene HTTP-Header - mit dem Unterschied, daß es selbst bedingt einen erzeugt, wenn einer gebraucht wird, und das bleiben läßt, wenn Du es nicht willst.
Denn Du willst es eigentlich nicht - Du willst statt dessen einen HTTP-Header mit einer Weiterleitung zum "hat geklappt"-Dokument ausgeben (ganz am Ende). Die Diagnose-Ausgaben mit der primitiven, "hart codierten" Variante behindern das Skript also an einer späteren Stelle - "Carp" würde das automatisch richtig machen.
Aber dieses Script schreibt ja nichts raus "ausser" die E-Mail.
Äh, das sollte es aber. Ein CGI-Skript hat eine HTTP-Response zu produzieren. Das muß kein Dokument sein (eine Weiterleitung oder gar ein Header "no data" würde auch tun), aber es wird sinnvollerweise eine Seite der Art "Ihre Mail wurde erfolgreich versandt" sein.
Der Form-Mailer macht das, glaube ich, über eine Weiterleitung - aber nur deshalb, weil er die Zieladresse derselben als CGI-Parameter bekommt und damit von vielen verschiedenen Anwendern in unterschiedlichste Sites eingebunden werden kann.
Da Du ihn aber lokal installiert hast, brauchst Du dieses Feature nicht - Du kannst Deine Antwort-Seite auch direkt von diesem Skript ausgeben lassen.
(Das würde die Mit-Benutzung Deines Skripts durch irgendwelche Spammer übrigens beträchtlich erschweren - außerdem solltest Du Deine Mail-Adresse dort fest einbrennen und sie nicht als CGI-Parameter übernehmen.)
und auch sonst gehe ich ja eher von einem funktionieren des scrptes
aus ,-)
Das ist leider nicht der Weg, einen Fehler zu finden. ;-)
Wo muß ich weiter suchen? (da ich ja nur atmosphärisch suchen konnte,
argwöhnte ich einen Fehler in der sendmail-Adresse oder ähnliches,
aber ein anderes Script meiner Seite bedient sich dieses Moduls(?)
ohne Schwierigkeiten....)
Mehr Debug-Ausgaben, bitte.
_Nachdem_ Du ganz vorne im Skript erst mal einen richtigen HTTP-Header erzeugt hast, kannst Du es im Verlauf der Verarbeitung mit "print"-Statements pflastern, wie Du willst.
Insbesondere die Inhalte derjenigen Variablen, welche in irgend einer Form an das Sendmail durchgereicht werden, wären hier von Interesse.
Die Fehlermeldung scheint ja auszusagen, daß die Zeile, an der Du
print "From:"
ausführst, ein Format erzeugt, das Deinem Sendmail nicht paßt.
Was genau wird also an dieser Stelle ausgegeben?
Viele Grüße
Michael