Dirk: Net::SMTP

Hallo,
ich habe ein kleines Problem mit Mailversand per Net::SMTP-Modul und hoffe, dass mir jemand hier helfen kann.

Ich möchte ausgelesene Formulardaten per e-Mail versenden und danach eine kurze Meldung ("Vielen Dank! ... blabla ...) im Browser ausgeben.
Der Mailversand klappt auch wunderbar, alle e-Mails kommen an.
Doch statt nach Versand die Bestätigungsseite auszugeben bietet er mir jedesmal die log-Datei vom SMTP-Versand zum Download an. :(

Öffnet man diese, dann scheint es, als ob das Script die print-Anweisungen, mit denen die Meldung erzeugt werden soll, noch sendet, bevor die Serververbindung getrennt wird.
Egal in welcher Reihenfolge ich das ganze ausführe (z.B.: zuerst die Meldung erzeugen, danach Mail-Versand) stets wird der Code für die Meldung noch mitgesendet.

In den Mails selbst steht unter den Formulardaten als letzte Angabe ein seltsames Zeichen (y mit einem Doppelpunkt wie bei ö darüber).

Hier mal das log:

Net::SMTP=GLOB(0x1b23538)<<< 220 asdf.asdf.asdf ESMTP Sendmail 8.12.1/8.12.1; Fri, 10 Jan 2003 10:39:32 +0100
Net::SMTP=GLOB(0x1b23538)>>> EHLO asdf.asdf.asdf
Net::SMTP=GLOB(0x1b23538)<<< 250-asdf.asdf.asdf Hello, pleased to meet you
Net::SMTP=GLOB(0x1b23538)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP=GLOB(0x1b23538)<<< 250-PIPELINING
Net::SMTP=GLOB(0x1b23538)<<< 250-8BITMIME
Net::SMTP=GLOB(0x1b23538)<<< 250-SIZE
Net::SMTP=GLOB(0x1b23538)<<< 250-DSN
Net::SMTP=GLOB(0x1b23538)<<< 250-ETRN
Net::SMTP=GLOB(0x1b23538)<<< 250-DELIVERBY
Net::SMTP=GLOB(0x1b23538)<<< 250 HELP
Net::SMTP=GLOB(0x1b23538)>>> MAIL FROM:meine.adresse@asdf.de
Net::SMTP=GLOB(0x1b23538)<<< 250 2.1.0 meine.adresse@asdf.de... Sender ok
Net::SMTP=GLOB(0x1b23538)>>> RCPT TO:empfaenger@web.de
Net::SMTP=GLOB(0x1b23538)<<< 250 2.1.5 empfaenger@web.de... Recipient ok

Net::SMTP=GLOB(0x1b23538)>>> DATA

Net::SMTP=GLOB(0x1b23538)<<< 354 Enter mail, end with "." on a line by itself

Net::SMTP=GLOB(0x1b23538)>>> Feld1: ja
.
.
.    Hier werden die Formulardaten übertragen
.
.
Net::SMTP=GLOB(0x1b23538)>>> Feldx: 0

Net::SMTP=GLOB(0x1b23538)Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<h1 align='center'>Vielen Dank!</h1><p align='center'>Ihre Anfrage wird schnellstmöglich bearbeitet.</p><p> </p><script>function redirect() {window.location="final.htm";}window.setTimeout("redirect()",5000);</script><p> </p><p align=center>Sollte Ihr Browser automatische Weiterleitung nicht unterstützen,<br>dann klicken Sie bitte<br><input type="button" value="hier!" onClick=window.location="frameset.html"></p>>>> config :  config.txt
Net::SMTP=GLOB(0x1b23538)>>> .
Net::SMTP=GLOB(0x1b23538)<<< 250 2.0.0 h0A9dWuD025488 Message accepted for delivery
Net::SMTP=GLOB(0x1b23538)>>> QUIT
Net::SMTP=GLOB(0x1b23538)<<< 221 2.0.0 asdf.asdf.asdf closing connection
-----------------------------------------------------------------

Ich hoffe, dass Ihr mir helfen könnt!
Vielen Dank schonmal!

Dirk

  1. Halihallo Dirk

    [...]
    Debug=>1 rausnehmen und überprüfen, ob der richtige HTTP-Header gesendet wird.
    Wahlweise close(STDERR), dann gehen die Servermeldungen ins Nirvana und stören die
    Ausgabe nicht.

    Viele Grüsse

    Philipp

    1. [...]
      Debug=>1 rausnehmen und überprüfen, ob der richtige HTTP-Header gesendet wird.

      Vielen Dank für die superschnelle Antwort!!!

      Wenn ich Debug=>1 rausnehme klappt es tatsächlich :D
      Allerdings habe ich in den Mails immernoch dieses seltsame Sonderzeichen. Gibt es da eine Möglichkeiten um das zu vermeiden (und was bedeutet dieses Zeichen überhaupt)?

      Nochmals vielen Dank!

      Dirk

      1. Halihallo Dirk

        [...]
        Debug=>1 rausnehmen und überprüfen, ob der richtige HTTP-Header gesendet wird.

        Vielen Dank für die superschnelle Antwort!!!

        Wieso, das waren mehr als 10 Minuten; das ist langsam ;-)

        Allerdings habe ich in den Mails immernoch dieses seltsame Sonderzeichen. Gibt es da eine Möglichkeiten um das zu vermeiden (und was bedeutet dieses Zeichen überhaupt)?

        Ui, das hatte ich gar nicht gesehen (hab dein Posting nur überflogen). Also, ich kann es
        mir aufgrund der mir vorliegenden Daten nicht erklären. Welche Kodierung verwendest du
        für die Formulardaten? - Ist es vielleicht Teil des Contents eines Feldes? - Und zuletzt
        die wichtigste Frage: Erscheint dieses ominöse Zeichen auch in der Mail?
        Vielleicht würde es sich lohnen, wenn du mal den ganzen Debug-Output postest.

        Viele Grüsse

        Philipp

  2. Halihallo Dirk

    Öffnet man diese, dann scheint es, als ob das Script die print-Anweisungen, mit denen die Meldung erzeugt werden soll, noch sendet, bevor die Serververbindung getrennt wird.
    Egal in welcher Reihenfolge ich das ganze ausführe (z.B.: zuerst die Meldung erzeugen, danach Mail-Versand) stets wird der Code für die Meldung noch mitgesendet.

    Ach ja, falls es nötig ist, dass du den Debug-Output dennoch brauchst:
    $| = 1;  # autoflush für STDOUT

    Die Ausgabe auf STDOUT ist im Gegensatz zu STDERR gepuffert; der STDERR wird
    also "schneller" ausgegeben und deshalb kommt er oft (aber nicht immer!) zuerst. Wenn
    du also die Ausgabe so ausgeben lassen willst, wie sie Ablauflogisch sein soll, musst du
    auch STDOUT "entpuffern". Zudem musst du wissen, dass es nicht immer so ist, dass
    Nachrichten nach STDERR an den Browser geleitet werden (sondern in's log, oder in's
    Nirvana)...
    Desweiteren würde hier auch ein

    BEGIN {
       $| = 1;
       print 'Content-Type: text/html'."\015\012" x 2;
    }

    Sinn machen. Dann wird der Header, wie auch der Autoflush am Anfang ausgegeben/gesetzt.
    Also noch bevor die erste Zeile deines "Hauptscripts" ausgeführt wird.

    Viele Grüsse

    Philipp