Cheatah: Gästebuch - eMails ohne Formatierung - warum ?

Beitrag lesen

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