Ingo Siemon: Gästebuch - eMails ohne Formatierung - warum ?

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

  1. 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

    1. 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/>.

      1. 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

        1. 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

  2. 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.

    1. 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