muellermilch: Perl Form Mailer will nicht!

hey hey, weiss nicht an wen ich mich sonst wenden soll habe die Seite bei google gefunden und verspreche mir das mir hier [doc]geholfen werden kann!

Da ich außer html nicht so fit bin im programmieren habe ich mir einen formmailer bei selfhtml runtergeladen... erstens tut es der nicht und zweitens will ich eine variable (id) übergeben sobald einer meine seite betritt das hatte ich so gedacht www.myspace.de?48343

selfmail.pl:

-------> Individuelle Parameter des Skriptes - bitte anpassen!

--> SMTP-Programm zum Versenden der Mail:

$Sendmail_Prog = "/usr/lib/sendmail";

--> Ziel-Mailadresse, an die gesendet werden soll:

$mailto = 'meineadresse@provider.de';

-------> Modul für CGI-Scripts einbinden:

use CGI;

-------> Modul für CGI-Scripts zum Einlesen der Formulardaten anwenden:

$query = new CGI;
@names = $query->param;

-------> interne Daten aus den erwarteten hidden-Feldern auslesen:

$delimiter = $query->param('delimiter'); # ---> Begrenzerzeichen zwischen name und value
$returnhtml = $query->param('return'); # ---> URL für Dankeseite
$subject = $query->param('subject'); # ---> E-Mail-Subject

-------> alle Whitespace-Zeichen (Leerzeichen, Tabulator, Newline) in Leerzeichen wandeln

VERHINDERT sonst möglichen MISSBRAUCH des Skripts

$subject =~ s/\s/ /g;

-------> Text der E-Mail aus den Formulardaten ermitteln:

$mailtext = "";
foreach(@names) {
$name = $_;
@values = "";
@values = $query->param($name);
if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
foreach $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}

-------> E-Mail versenden:

open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
print MAIL "To: $mailto\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$mailtext\n";
close(MAIL);

-------> Dankeseite an Browser senden:

print "Location: $returnhtml\n\n";

keine sorge meine email habe ich eingetragen!

mein quelltext der homepage sieht so aus..

...
<script type="text/javascript">
if (window.location.search != "")
var id= window.location.search;
</script>
...
<FORM ACTION="../cgi-bin/selfmail.pl" METHOD="POST">

<input type="hidden" name="return" value="www.whatever.de/danke.html">
<input type="hidden" name="delimiter" value=": ">
<input type="hidden" name="subject" value="Feedback-Formular">
<input type="hidden" name="refferal" value="id"> // <-- hier soll der die variable anzeigen ich ich mit script auslese!

Anrede:
<select size="1" name="Anrede" style="font-size: 12px;" class="copy"><option value="Herr">Herr</option><option value="Frau">Frau</option></select>

Vorname:
<input class="text" type="text" name="vorname" size="23" style="font-size: 12px;" maxlength="35">

Name:
<input class="text" type="text" name="name" size="23" style="font-size: 12px;" maxlength="35">

Straße:
<input class="text" type="text" name="strasse" size="23" style="font-size: 12px;" maxlength="35">

Hausnummer:
<input class="text" type="text" name="hausnummer" size="23" style="font-size: 12px;" maxlength="35">

PLZ:
<input class="text" type="text" name="plz" size="23" style="font-size: 12px;" maxlength="35">

Wohnort:
<input class="text" type="text" name="wohnort" size="23" style="font-size: 12px;" maxlength="35">

E-Mail:
<input class="text" type="text" name="email" size="23" style="font-size: 12px;" maxlength="35" />

Geburtstag:
<select name="GebDateT" style="font-size: 12px;" class="copy">... </select>
<select name="GebDateM" style="font-size: 12px;" class="copy">...</select>
<select name="GebDateJ" style="font-size: 12px;" class="copy">...</select>

<INPUT class="button" type="submit" name="submit" VALUE="Abschicken">
</form>

ich hoffe mir kann jemand helfen und erbarmt sich auch mir zu helfen!

mfg muellermilch und ein danke im vorraus

  1. hi,

    <FORM ACTION="../cgi-bin/selfmail.pl" METHOD="POST">

    das kann nicht gehen, hier muss eine virtuelle, auf den server bezogene adresse stehen, z.b. action="/cgi-bin/selfmail.pl"

    ansnsten die üblichen Verdächtigen:
    script ausführbar (chmod 755)?
    CGI-Schnittstelle richtig konfiguriert, stimmt das Verzeichnis cgi-bin? Ggf. mit einem einfachen CGI-Script testen, siehe unten,
    stimmt der pfad zum perl-interpreter, erste Zeile im script?
    ============ schnipp ===============
    #!/usr/bin/perl
    print "Content-type: text/html\n\n";
    print "Helo World";
    ============ schnapp ===============

    und Logdatei anschauen, wenn was nicht geht.

    --roro

    1. hi,

      <FORM ACTION="../cgi-bin/selfmail.pl" METHOD="POST">

      das kann nicht gehen, hier muss eine virtuelle, auf den server bezogene adresse stehen, z.b. action="/cgi-bin/selfmail.pl"

      Was meinst du damit?

      ../ wechselt vom aktuellen Verzeichnispfad aus eine Ebene nach oben, wieso soll das nicht gehen?

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. hi,

        <FORM ACTION="../cgi-bin/selfmail.pl" METHOD="POST">

        das kann nicht gehen, hier muss eine virtuelle, auf den server bezogene adresse stehen, z.b. action="/cgi-bin/selfmail.pl"

        Was meinst du damit?

        ../ wechselt vom aktuellen Verzeichnispfad aus eine Ebene nach oben, wieso soll das nicht gehen?

        Das geht mit HTML, aber nicht mit CGI. Hier muss eine Adresse stehen, die per HTTP erreichbar ist, z.B.:

        action="http://example.com/cgi-bin/script.pl"

        Wenn das Script auf demselben Server liegt, kann die actionnote abgekürzt werden auf, weil

        action="/cgi-bin/script.pl"
                ^ ab hier die virtuelle root des servers ist.

        Viele Grüße, Rolf

        1. Was meinst du damit?

          ../ wechselt vom aktuellen Verzeichnispfad aus eine Ebene nach oben, wieso soll das nicht gehen?

          Das geht mit HTML, aber nicht mit CGI. Hier muss eine Adresse stehen, die per HTTP erreichbar ist, z.B.:

          Der code des Formulares scheint mir aber in einer HTML Seite zu stecken, es wurde zwar nicht explizit gesagt, aber die Trennung vom Perl Code deutet darauf hin, insofern dürfte die Angabe richtig sein.

          Struppi.

          --
          Javascript ist toll (Perl auch!)
          1. jo ist richtig das is im html code...!

            mfg muemi...

          2. Was meinst du damit?

            ../ wechselt vom aktuellen Verzeichnispfad aus eine Ebene nach oben, wieso soll das nicht gehen?

            Das geht mit HTML, aber nicht mit CGI. Hier muss eine Adresse stehen, die per HTTP erreichbar ist, z.B.:

            Der code des Formulares scheint mir aber in einer HTML Seite zu stecken, es wurde zwar nicht explizit gesagt, aber die Trennung vom Perl Code deutet darauf hin, insofern dürfte die Angabe richtig sein.

            Struppi, ich frage mich ernsthaft wassn los mit Dir ;-)

            Numal im Ernst: es ist egal, ob ein request auf ein CGI-Script aus einer HTML-Seite kommt oder von sonstwo. Auf jeden Fall muss der Request übers Protokoll (HTTP, HTTPs) kommen und da steht vornedran entweder ein "/" (wenn auf demselben server) oder ein http://example.com.

            Glaubs mir ;-)

            --roro

            1. hi,

              Struppi, ich frage mich ernsthaft wassn los mit Dir ;-)

              Und bei dir frage ich mich, ob du Referenzieren in HTML verstanden hast.

              Numal im Ernst: es ist egal, ob ein request auf ein CGI-Script aus einer HTML-Seite kommt oder von sonstwo. Auf jeden Fall muss der Request übers Protokoll (HTTP, HTTPs) kommen und da steht vornedran entweder ein "/" (wenn auf demselben server) oder ein http://example.com.

              Du hast dich auf

              <FORM ACTION="../cgi-bin/selfmail.pl" METHOD="POST">

              bezogen.

              Das ist eine ganz normale relative Adressierung.

              Wenn das in einem HTML-Dokument steht, das beispielsweise über
              http://example.com/formular/index.html
              abgerufen wurde, dann vervollständigt der HTML-kompatible Client die relative Angabe zu
              http://example.com/cgi-bin/selfmail.pl

              Also wo bitte siehst du jetzt ein Problem?

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. hi,

                Also wo bitte siehst du jetzt ein Problem?

                Kein Problem. Ich versuchte lediglich, die CGI-Schnittstelle zu erklären, aber das kann ja jeder selbst in SELFHTL nachlesen (Stichwort "wie wird ein CGI-Script aufgerufen").

                Viele Grüße, Rolf

                1. Also wo bitte siehst du jetzt ein Problem?

                  Kein Problem. Ich versuchte lediglich, die CGI-Schnittstelle zu erklären, aber das kann ja jeder selbst in SELFHTL nachlesen (Stichwort "wie wird ein CGI-Script aufgerufen").

                  Damit hat deine Antwort nichts zu tun, du kannst auf einem Server auch über einen relative Pfadangabe ein CGI skript aufrufen. Oder steht in selfhtml was anderes?

                  Struppi.

                  --
                  Javascript ist toll (Perl auch!)
                  1. so alles durchgegangen helo welt wird angezeigt daran liegts auch nicht, sonst fällt euch nichts auf?

                    mfg muellermilch

                    1. so alles durchgegangen helo welt wird angezeigt daran liegts auch nicht, sonst fällt euch nichts auf?

                      mfg muellermilch

                      Na ist doch prima. Jetzt setzt Du Dein heloworld script mal in die actionnote Deiner FormMailerHTML-Datei, klickst mal auf "Absenden" und guckst mal was passiert. Erwartungsgemäß sollte "helo world" dann angezeigt werden.

                      Viele Grüße,
                      Rolf

            2. das kann aber nicht der einziege fehler sein, geht immernoch net!

              mfg muellermilch

              1. das kann aber nicht der einziege fehler sein, geht immernoch net!

                geht mal den anderen Hinweisen vom rolf nach, denn die waren durchaus richtig.
                (und der Übersicht halber auch dort antworten)

                Struppi.

                --
                Javascript ist toll (Perl auch!)
            3. Numal im Ernst: es ist egal, ob ein request auf ein CGI-Script aus einer HTML-Seite kommt oder von sonstwo. Auf jeden Fall muss der Request übers Protokoll (HTTP, HTTPs) kommen und da steht vornedran entweder ein "/" (wenn auf demselben server) oder ein http://example.com.

              oder ein "../" oder ein "../../" oder oder...
              Seit wann darf im action Parameter kein relativer Pfad stehen?
              Ich befürchte du hast bisher nur in einer CGI Umgebung gearbeitet, wo der CGI Pfad ausserhalb des www Pfades ist (mach ich nie), aber selbst dann ist ein relativer Pfad kein Hinderniss.

              Glaubs mir ;-)

              Nö.

              Struppi.

              --
              Javascript ist toll (Perl auch!)
  2. Also erstmal, es ist sinnvoll auf das Postingf das sich die Antwort bezieht und dann auch den Inhalt auf den man sich bezieht stehen zu lassen.

    Da ich außer html nicht so fit bin im programmieren habe ich mir einen formmailer bei selfhtml runtergeladen... erstens tut es der nicht und zweitens will ich eine variable (id) übergeben sobald einer meine seite betritt das hatte ich so gedacht www.myspace.de?48343

    tut nicht, ist natürlich eine sehr präzise Fehlerbeschreibung, mit der erstmal keiner was anfangen kann, bei mir tuten auch kein Programm, es erzeugt entweder Fehlermeldungen und es erfüllt gewünschte Funktionen nicht, wenn etwas nicht i.O. ist.

    Aber zurück zum Skript, das ist leider auch nciht optimal, da keine Warnungen angeziegt werden und use strict nicht verwendet wird, dadurch wird die Fehlersuche leider erschwert (ein Fehler des selfhmtl Beispiel)

    Allerdings müßtest du um diesen Mackel zu beheben Änderungen an dem Skript vornehmen, die evtl. deine Kenntnisse überfordern (alle Variabeln deklarieren)

    selfmail.pl:

    -------> Individuelle Parameter des Skriptes - bitte anpassen!

    --> SMTP-Programm zum Versenden der Mail:

    $Sendmail_Prog = "/usr/lib/sendmail";

    Hier könnte es Sinnvoll sein die existenz des Programms zu prüfen.

    die "Sendmail Programm existiert nicht!" unless -e $Sendmail_Prog;

    Damit du die Meldung angeziegt bekommst, musst du in deinem Skript noch am Anfang ein: use CGI::Carp qw/fatalsToBrowser/; einfügen. (ist sowieso sinnvoll bei der Fehelrsuche)

    open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";

    Hier ist es u.U. sinnvoll den Grund zu erfahren:

    open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden, weil: $!\n";

    Die Meldung erscheint allerdings im Errorlog, ich weiß nicht ob du darauf Zugriff hast.

    Besser wäre:
    open(MAIL,"|$Sendmail_Prog -t") || die "Mailprogramm konnte nicht gestartet werden, weil: $!\n";

    <script type="text/javascript">
    if (window.location.search != "")
    var id= window.location.search;
    </script>
    ...
    <FORM ACTION="../cgi-bin/selfmail.pl" METHOD="POST">

    <input type="hidden" name="return" value="www.whatever.de/danke.html">
    <input type="hidden" name="delimiter" value=": ">
    <input type="hidden" name="subject" value="Feedback-Formular">
    <input type="hidden" name="refferal" value="id"> // <-- hier soll der die variable anzeigen ich ich mit script auslese!

    Das ist wieder ein anderes Problem, auf die schnelle kannst du sowas machen:

    <script type="text/javascript">
    if (window.location.search != "") document.forms[0].id.value = window.location.search;
    </script>

    Achtung! Das muss hinter dem Code des GANZEN Formulares stehen und das sendmail Formular muss das erste im HTML Code sein.

    ich hoffe mir kann jemand helfen und erbarmt sich auch mir zu helfen!

    Auch wenn ich ein grosser Fan von Perl bin, nutze ich für sowas lieber PHP, damit läßt sich leicht eine HTML Seite mit dem Formular und dem Skript bauen. Da du das dann ganz normal in deine Seiten Struktur einbauen kannst, entstehen weniger Probleme.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Wie es der Zufall will, geht es jetzt!

      Jetzt hänge ich nur noch an dem Problem mit der ID!

      Wir nehmen die URL www.wasweissich.de?14221

      Diese ID soll also nun mitgesendet werden!

      Dazu wurde mir ja nun folgender Code von Struppi mit auf den Weg gegeben, ich habe seinen Achtungs Hinweis auch beachtet aber wie rufe ich die ID ab damit sie mitgesendet wird?

      Mit der Zeile funktioniert es nicht!

      <input type="hidden" name="id" value="id">

      MfG Muellermilch

      1. Dazu wurde mir ja nun folgender Code von Struppi mit auf den Weg gegeben, ich habe seinen Achtungs Hinweis auch beachtet aber wie rufe ich die ID ab damit sie mitgesendet wird?

        Mit der Zeile funktioniert es nicht!

        <input type="hidden" name="id" value="id">

        ich hatte dir auch darauf schon einen Vorschlag genannt.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. <script type="text/javascript">
          if (window.location.search != "") document.forms[0].id.value = window.location.search;
          </script>

          ^^damit lese ich sie doch nur aus oder? dann muss ich sie doch noch irgendwie in das Formular packen, dass sie mitgesendet wird!

          mfg

          1. <script type="text/javascript">
            if (window.location.search != "") document.forms[0].id.value = window.location.search;
            </script>

            ^^damit lese ich sie doch nur aus oder?

            oder was?
            Du kannst value sowohl lesen als auch verändern.

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. Wie muss denn die Zeile des Formulars bitte aussehen damit der die ID ausließt?

              <input type="hidden" name="refferal" value="ID">

              tut es nicht!

              mfg

              1. Wie muss denn die Zeile des Formulars bitte aussehen damit der die ID ausließt?

                <input type="hidden" name="refferal" value="ID">

                Seit wann hast du die ID Gross geschrieben, in deinem ursprünglichne Code wurde id klein geschrieben.

                tut es nicht!

                auch JS tuten nicht, kannst du nicht mal versuchen die Fehlermeldungen zu nennen oder wenigstens was passiert.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. Wenn ich meine Email vom Formmailer erhalte steht lediglich in dieser ref: id...

                  Die Variable id wird nicht umgesetzt!

                  mfg

                  1. Wenn ich meine Email vom Formmailer erhalte steht lediglich in dieser ref: id...

                    Die Variable id wird nicht umgesetzt!

                    Dann machst du was falsch und ignorierst die Fehlermeldung oder hast meine Hinweise nicht gelesen.

                    Struppi.

                    --
                    Javascript ist toll (Perl auch!)