Gästebuch - eMails ohne Formatierung - warum ?
Ingo Siemon
- cgi
0 Ingo Siemon0 Cheatah0 Ingo Siemon0 Cheatah
0 xNeTworKx
Hallo Ihr Lieben
Ich nute auf meiner Webseite eine Gästebuch-Perl-Script.
Dieses Script sendet an den Empfänger ja eine eMail.
Laut mehrerer User soll diese eMail aber leider völlig unformatiert sein
(also ohne Zeilen-Umbrüche)
Das Script nutzs als "Vorlage" für die eMail eine einfache TXT-Datei.
Ich würde mich sehr freuen, wenn das mal ein paar von Euch testen könnten :)
(Einfach mal eine ePostkarte an sich selber senden)
Meine URL: http://www.SPACEart.info
Bitte postet dann doch hier, ob die eMail formatiert ist oder nicht.
Ich danke schon mal ganz doll im Vorraus für Eure Hilfe :))
Gruß aus Münster
Ingo Siemon
Hallo Ihr Lieben
Ich nute auf meiner Webseite eine Gästebuch-Perl-Script.
Sorry für den Fehler :)
Ich meine natürlich ein ePostkarten-Pearl-Script.
Gruß
Ingo
Hi,
Ich meine natürlich ein ePostkarten-Pearl-Script.
das bringt uns leider auch nicht weiter (abgesehen von der Erkenntnis, dass Du "Perl" nicht schreiben kannst *g*). Hilfreich wäre der Quellcode(!) einer Mail (inkl. Header!), und natürlich das Code-Schnipselchen, welches diese aus der Text-Datei generiert. Die Datei selbst ist vermutlich unerheblich; schau sie Dir aber bitte auch noch mal an.
Cheatah
P.S.: Wie man in diesem Forum Links schreibt, steht in der </faq/>.
Hallo
das bringt uns leider auch nicht weiter (abgesehen von der Erkenntnis, dass Du "Perl" nicht schreiben kannst *g*). Hilfreich wäre der Quellcode(!) einer Mail (inkl. Header!), und natürlich das Code-Schnipselchen, welches diese aus der Text-Datei generiert. Die Datei selbst ist vermutlich unerheblich; schau sie Dir aber bitte auch noch mal an.
OK, hier also die beiden Teile des Scripts, welche die
eMails genaerieren:
------------------------------------------------------------------
##########################
#Send E-mail to Recipient
##########################
open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n";
print MAIL "To: $VALUE{'MAILTO'} ($VALUE{'RECIPIENT'})\n";
print MAIL "From: $VALUE{'MAILFROM'} ($VALUE{'SENDER'})\n";
print MAIL "Subject: $VALUE{'RECIPIENT'}, $subject1\n\n";
open(TEMPLATE,"$email1");
&template;
print MAIL $template;
#print MAIL ".\n" ;
close(MAIL);
$deletes = "$cards$DATE.dat";
if(-e $deletes){
}
else{
open(DATA, ">>$deletes");
close(DATA);
&delete;
}
exit;
}
------------------------------------------------------------------
und
------------------------------------------------------------------
############################################
#Makes Postcards and Sends Thank You E-mail
############################################
$create_card = "$cards$ENV{'QUERY_STRING'}.dat";
if(-e $create_card){
open(DATA, "$create_card");
@data = <DATA>;
close(DATA);
foreach $temp (@data){
chop($temp);
($SENDER, $MAILFROM, $RECIPIENT, $MAILTO, $MESSAGE, $PICTURES, $COUNT) = split(/|/, $temp);
$VALUE{'SENDER'} = $SENDER;
$VALUE{'MAILFROM'} = $MAILFROM;
$VALUE{'RECIPIENT'} = $RECIPIENT;
$VALUE{'MAILTO'} = $MAILTO;
$VALUE{'MESSAGE'} = $MESSAGE;
$VALUE{'MESSAGE'} =~ s/ / /g;
$VALUE{'PICTURES'} = "$basepicurl$PICTURES";
$VALUE{'LINK'} = "$link$LINK";
$VALUE{'PICTURE'} = "$basepicurl$PICTURES";
}
unlink("$create_card");
open(DATA, ">>$create_card");
$COUNT++;
print DATA "$SENDER|$MAILFROM|$RECIPIENT|$MAILTO|$MESSAGE|$PICTURES|$COUNT\n";
close(DATA);
print "Content-type: text/html\n\n";
open(TEMPLATE,"$makecard");
&template;
print $template;
$template = '';
if($COUNT eq '1'){
open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n";
print MAIL "To: $VALUE{'MAILFROM'} ($VALUE{'SENDER'})\n";
print MAIL "From: $VALUE{'MAILTO'} ($VALUE{'RECIPIENT'})\n";
print MAIL "Subject: $subject2\n\n";
open(TEMPLATE,"$email2");
&template;
print MAIL $template;
print MAIL ".\n" ;
close(MAIL);
}
}
else {
print "Content-type: text/html\n\n";
open(TEMPLATE,"$error");
&template;
print $template;
}
exit;
}
------------------------------------------------------------------
Die beiden eMail-TXT-Dateien heissen:
mail1.txt
mail2.txt
uns sehen folgendermassen aus:
------------------------------------------------------------------
Hallo %%%RECIPIENT%%%,
%%%SENDER%%% hat Ihnen eine SPACEart-Internet-ePostkarte geschickt.
Um sich die ePostkarte anzusehen, klicken Sie bitte einfach auf folgenden Link:
%%%url_of_card%%%
Die ePostkarte wurde erstellt am %%%SHORTDATE%%%,
und wird nun %%%MAX_DAYS%%% Tage für Sie gespeichert.
++++++++++++++++++++++++++++++++++++++++++++++
SPACEart - Science Fiction + Erotik Modellbau
Grosser Online-Shop mit über 1300 Artikeln
Telefon: 02 51 - 379 40 58
Telefax: 02 51 - 379 40 63
Internet: http://www.SPACEart.info
eMail: mail@SPACEart.info
------------------------------------------------------------------
und
------------------------------------------------------------------
Hallo %%%SENDER%%%,
Dies ist nur eine kurze info-eMail,
dass die SPACEart-Internet-ePostkarte,
welche Sie an %%%RECIPIENT%%% geschickt hatten,
am %%%SHORTDATE%%% abgerufen wurde.
Wenn Sie noch weitere SPACEart-Internet-ePostkarten versenden möchten,
besuchen Sie uns wieder:
http://www.SPACEart.info
(klicken Sie auf "ePostkarten")
Vielen Dank und Gruß aus Münster
Ingo Siemon
++++++++++++++++++++++++++++++++++++++++++++++
SPACEart - Science Fiction + Erotik Modellbau
Grosser Online-Shop mit über 1300 Artikeln
Telefon: 02 51 - 379 40 58
Telefax: 02 51 - 379 40 63
Internet: http://www.SPACEart.info
eMail: mail@SPACEart.info
------------------------------------------------------------------
Ausprobieren lässt sich das ganze auf: http://www.SPACEart.info
(Einfach links auf "ePaostkarten" klicken und eine Karte an sich selber schicken)
Über weitere Hilfe würde ich mich wie immer riesig freuen :)
Gruß aus Münster
Ingo Siemon
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
Hallo,
Ich bekomme gar kein Email zugestellt. Ich habe es 2 Mal probiert, ausserdem kann ich sogar emails senden, wenn ich statt einer Email Adresse nur Unfug eingebe.
Ich bekomme gar kein Email zugestellt. Ich habe es 2 Mal probiert, ausserdem kann ich sogar emails senden, wenn ich statt einer Email Adresse nur Unfug eingebe.
Hmmmm, das ist aber sehr merkwürdig :)
Ich habe das eben grade selber nochmal mit mehreren verschiedenen eMail-Adressen probiert und die werden alle zugestellt.
Bist Du sicher, dass Du die ePaostkarten gestestet hast,
nicht (wie in meinem ersten Posten fälschlicherweise geschriebenen) Gästebuch ?
Ich würde mich sehr freuen, wenn Du es nochmal probieren könntest :)
Gehe auf: http://www.SPACEart.info und klicke links auf
"ePostkarten". Dann sende einfach eine Postkarte an Dich selber.
Was ich dann gerne wüsste, ist, ob die eMail, die Dir dann als
Emfänger der Postkarte zugestellt wird, formatiert ist (also
mit Zeilenumbrüchen) oder nicht :)
Gruß aus Münster
Ingo Siemon