Hi,
open (MAIL, "|$mailprog -t")
das hatte ich befürchtet. Du möchtest
perldoc Net::SMTP
lesen, nachdem Du das Modul ggf. aus der libnet-Bibliothek von http://www.cpan.org/ installiert hast.
|| die "Can't open $mailprog!\n";
Sehr schön, aber füge dem Fehlertext doch noch "$!" hinzu (und das "\n" brauchst Du nicht). Im Error-Log steht ganz bestimmt nichts?
print MAIL "To: $VALUE{'MAILTO'} ($VALUE{'RECIPIENT'})\n";
Zur Groß- und Kleinschreibung von Variablennamen steht in
perldoc perlstyle
etwas. Wenn Du das beachtet hättest, hätte ich nicht solche Schwierigkeiten, Deinen Code zu erfassen. Es ist anstrengend, ihn zu lesen.
open(TEMPLATE,"$email1");
Auch hier ist ein 'die' notwendig. Lies übrigens auch
perldoc perlfaq4 -- What's wrong with always quoting "$vars"?
&template;
Dies ist wohl die entscheidende Funktion, die Du leider nicht zitiert hast.
print MAIL $template;
Humpf! Ändert die Funktion etwa eine globale Variable? Du möchtest das ändern,
perldoc -f return
lesen und 'my $template = &template(%daten);' o.ä. schreiben. A propos 'my': Dein Script beginnt augenscheinlich nicht mit
#!/usr/bin/per -w
use strict;
Korrigiere das. Dir werden viele Fehler genannt werden, von denen einige vielleicht sogar für das Problem verantwortlich sind. Falls es nicht sendmail selbst ist.
$create_card = "$cards$ENV{'QUERY_STRING'}.dat";
Jiautsch. Dir ist schon klar, dass der User auf diese Weise quasi beliebige Systemkommandos bei Dir ausführen kann? Lies bitte
perldoc CGI
zum Umgang mit URL- und POST-Parametern, und mache eine semantische Prüfung, bevor Du Dateinamen aus Usereingaben generierst.
chop($temp);
perldoc -f chomp
$VALUE{'SENDER'} = $SENDER;
$VALUE{'MAILFROM'} = $MAILFROM;
[...]
Waaah. Ich krieg Augenkrebs. Noch mal:
perldoc perlstyle
if($COUNT eq '1'){
Äh, bei Zahlen ist ein Stringvergleich unnötig. 'if ($count == 1) {' wäre die richtige Schreibweise - auch im Hinblick auf Variablennamen und Leerzeichen.
open(TEMPLATE,"$email2");
&template;
Äh, benutzt diese Funktion sogar einen global geöffnetes Datei-Handle? Aua. Bitte beschäftige Dich mit den Thematiken 'Kapselung von Funktionen' und 'Scope, Übergabeparameter, Rückgabewerte, lokale und globale Aktionen', und zwar ganz unabhängig von Perl. Frag Deinen Informatik-Lehrer bzw. -Professor, oder besuche einen VHS-Kurs o.ä. Ein gutes Buch könnte auch schon reichen.
Die beiden eMail-TXT-Dateien heissen:
[...]
uns sehen folgendermassen aus:
Welche Umbrüche werden verwendet?
++++++++++++++++++++++++++++++++++++++++++++++
Übrigens: Ein Signaturtrenner besteht aus "-- " (Minus Minus Leerzeichen) allein in einer Zeile.
Cheatah