stammberger: Formmailer sendet den Namen des Servers als Absender

Guten Abend. Ich habe ein Problem mit meinem Formmailer. Ich habe eine contact.html Datei und eine mail.pl Datei. In dieser kann ich leider nicht richtig festlegen, das die eingebene e-Mail Adresse des Ausfüllers als Absender in der erhaltenen e-Mail erscheinen soll. Ich habe den Quelltext unten mal reingesetzt und hoffe, das mit jemand hier helfen kann. Ich bedanke mich schon einmal im Vorraus.

contact.html Datei

<html>  
<head>  
<title>Stammberger - Tuning</title>  
<meta http-equiv="cache-control" content="no-cache">  
<meta name="pragma" content="no-cache">  
<link rel="stylesheet" href="design.css" type="text/css">  
<META http-equiv=Page-Enter content=progid:DXImageTransform.Microsoft.GradientWipe(GradientSize=0.50,wipestyle=0,motion=forward>  
<META http-equiv=Page-Exit content=progid:DXImageTransform.Microsoft.GradientWipe(GradientSize=0.50,wipestyle=0,motion=reverse>  
</head>  
<body>  
<!--  
<DIV id=overDiv style="Z-INDEX: 1000; VISIBILITY: hidden; POSITION: absolute"></DIV>  
<SCRIPT language=JavaScript src="http://www.stammbergertuning.de/overlib.js" type=text/javascript></SCRIPT>  
--><div align="center">  
<center>  
  <table border="0" width="90%" cellspacing="10" height="66">  
 <tr><td><b><font size="4">Direktkontakt f&uuml;r R&uuml;ckfragen</font></b></td></tr>  
  
<SCRIPT language=JavaScript>  
  <!--  
  2* function chkFormular()  
  {  
   if(document.Formular.Vorname.value == "")  
    {  
     alert("Bitte geben Sie Ihren Vornamen ein!");  
     document.Formular.Vorname.focus();  
     return false;  
    }  
   if(document.Formular.Nachname.value == "")  
    {  
     alert("Bitte geben Sie Ihren Nachnamen ein!");  
     document.Formular.Nachname.focus();  
     return false;  
    }  
   if(document.Formular.Strasse.value == "")  
    {  
     alert("Bitte geben Sie Ihre Strasse ein!");  
     document.Formular.Strasse.focus();  
     return false;  
    }  
   if(document.Formular.Postleitzahl.value == "")  
    {  
     alert("Bitte geben Sie Ihre Postleitzahl ein!");  
     document.Formular.Postleitzahl.focus();  
     return false;  
    }  
   if(document.Formular.Ort.value == "")  
    {  
     alert("Bitte geben Sie Ihren Ort ein!");  
     document.Formular.Ort.focus();  
     return false;  
    }  
   if(document.Formular.email.value == "  .  .")  
    {  
     alert("Bitte geben Sie Ihre E-Mail-Adresse ein!");  
     document.Formular.email.focus();  
     return false;  
    }  
   if(document.Formular.email.value.indexOf('@') == -1)  
    {  
     alert("Leider haben Sie keine E-Mail-Adresse eingegeben!");  
     document.Formular.email.focus();  
     return false;  
    }  
   if(document.Formular.Mitteilung.value == "")  
    {  
     alert("Bitte fuellen Sie das Mitteilungsformular aus!");  
     document.Formular.Mitteilung.focus();  
     return false;  
    }  
  }  
  //-->  
 </SCRIPT>  
<form action=http://www.stammbergertuning.de/cgi-bin/mail.pl method=post name=Formular  
onsubmit="return chkFormular()"><INPUT name=subject type=hidden value=Kontaktformular_Stammbergertuning.de>  
<input type="hidden" name="return" value="http://www.stammbergertuning.de/mail/antwortschreiben.htm">  
<input type="hidden" name="delimiter" value=": ">  
<table width="100%" border="0" cellspacing="0" cellpadding="0">  
<tr>  
<td>Die mit * gekennzeichneten Felder m&uuml;ssen ausgef&uuml;llt werden!</td>  
</tr>  
</table>  
<br>  
<table width="100%" border="0" cellspacing="2" cellpadding="2">  
<tr>  
   <td align="right">  
   <span class="text2">*&nbsp;Vorname:</span></td>  
  
   <td><input id=Vorname maxLength=30 name=Vorname size=30></td>  
 </tr>  
  
 <tr>  
   <td align="right">  
   <span class="text2">*&nbsp;Nachname:</span></td>  
   <td><input id=Nachname maxLength=30 name=Nachname size=30></td>  
 </tr>  
  
 <tr>  
   <td align="right">  
   <span class="text2">* Strasse:</span></td>  
   <td><input id=Strasse maxLength=30 name=Strasse size=30></td>  
 </tr>  
  
 <tr>  
   <td align="right">  
  
   <span class="text2">* Postleitzahl:</span></td>  
   <td><input id=Postleitzahl maxLength=5 name=Postleitzahl size=5></td>  
 </tr>  
  
 <tr>  
   <td align="right">  
   <span class="text2">* Ort:</span></td>  
   <td><input id=Ort maxLength=30 name=Ort size=30></td>  
  
 </tr>  
  
 <tr>  
   <td align="right">  
   <span class="text2">Telefon:</span></td>  
   <td><input id=Telefon maxLength=30 name=Telefon size=30></td>  
 </tr>  
  
 <tr>  
  
   <td align="right">  
   <span class="text2">*&nbsp;E-Mail:</span></td>  
   <td><input id=email maxLength=30 name=email size=30></td>  
 </tr>  
  
  <tr>  
   <td align="right" valign="top"><span class="text2">*&nbsp;Mitteilung:</span></td>  
  
   <td with="100"><textarea name=Mitteilung rows="15" cols="80" class="textbox"></textarea></td>  
 </tr>  
  
</table>  
  
  <input type="hidden" name="IP-Nummer" value="">  
  <input type="hidden" name="IP-Adresse" value="">  
  
  
<table width="100%" border="0" cellspacing="2" cellpadding="2">  
 <tr>  
  
  <td height="40">  
   <div align="center">&nbsp;<input type=submit value=Absenden name=send style="font-family: Arial; font-size: 12pt">&nbsp;&nbsp;&nbsp;<input type=reset style="font-family: Arial; font-size: 12pt">  
   </div>  
     </td>  
    </tr>  
  </table>  
 </form>  
</center></div>  
<div align="center"><form action="javascript:history.back(-1)"><input name="zur Startseite" type="submit" value="zur Startseite" class="zurueck"></form></div>  
</BODY>  
  
</HTML>

mail.pl Datei

#!/usr/bin/perl  
  
# -------> 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 = 'marco@stammbergertuning.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";
  1. Guten Abend. Ich habe ein Problem mit meinem Formmailer. Ich habe eine contact.html Datei und eine mail.pl Datei. In dieser kann ich leider nicht richtig festlegen, das die eingebene e-Mail Adresse des Ausfüllers als Absender in der erhaltenen e-Mail erscheinen soll. Ich habe den Quelltext unten mal reingesetzt und hoffe, das mit jemand hier helfen kann. Ich bedanke mich schon einmal im Vorraus.

    Hallo
    Deine Frage ist ein schwieriger Fall, obwohl er, um den Status Quo zu erhalten, einfach behoben werden kann.
    Hier einige Gründe.

    Das Script ist mangelhaft:

    • es verwendet kein use strict
    • es hat wahrscheinlich auch noch nie use warnings gesehen
    • wenn ein User JS deaktiviert, gehen Eingaben einfach unvalidiert weiter
    • Konstanten, die eigentlich ins Script gehören, liegen im HTML Formular
    • Die Variablennamen sind vollkommen irreführend und mit ein Grund, warum der Durchblick nicht leicht ist.

    Das HTML Formular ist mangelhaft:

    • kein vernünftiges Markup
    • ich vermisse <label> Elemente

    Javascript

    • offenbar etwas hilflos, nicht wirklich assistierend
    • falsch eingesetzt. Validierung hat auf dem Server zu geschehen.

    Dein Formmailer kann ziemlich einfach missbraucht werden, was zwar, wegen der hardkodierten Empfängeradresse nur dir schadet. Aber das würde ich mir doch Gründlich überlegen.

    Mal das als mein Input.

    mfg Beat

    --
    Woran ich arbeite:
    X-Torah
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    1. Hallo.

      Das Problem ist nur, das ich alles nicht genau verstehe, aber es verstehen lernen möchte. Kann mir jemand von Euch, mir vielleicht dabei helfen, damit der Formmailer funktioniert und ihn nur noch ersetzen muss? Ich habe hier schon einiges nachgelesen und bin auf nur gutes gestoßen. Ich bin halt kein Profi und möchte mir auch in Zukunft selber helfen können.

      LG stammberger

      1. Das Problem ist nur, das ich alles nicht genau verstehe, aber es verstehen lernen möchte. Kann mir jemand von Euch, mir vielleicht dabei helfen, damit der Formmailer funktioniert und ihn nur noch ersetzen muss? Ich habe hier schon einiges nachgelesen und bin auf nur gutes gestoßen. Ich bin halt kein Profi und möchte mir auch in Zukunft selber helfen können.

        Hi
        Schon mal gut, dass dich die generelle Kritik nicht verscheucht hat.

        Das Gute vorab: Formmailer sind Dinge, die sehr häufig gefragt sind. Entsprechend gut dürfte die Chance sein, eine freie gute neue Version, die in allen Komponenten auch sinnreich geschrieben ist, zu finden.

        Und nun das weniger Gute:
        Will man es selber machen, steht man vor Lernschritten. Diese sind zwar machbar, aber eben doch umfassend, und im Falle von Formmailer, die ja gerne durch Bots versucht werden, auch mit einigem Nachdenken verbunden.

        Wenn du also das ganze verstehen willst, dann können wir die Sache in eine richtige Ordnung bringen.
        Das Script selbst ist ein relativ unproblematischer Abschnitt im Ganzen. Aber die Information, die das Script zu verarbeiten hat, wird durch das HTML Formular definiert. Dieses stellt damit die Basis für das Perl Programm dar.

        Deshalb schlage ich dir vor:
        Erstelle das Formular zuerst einmal mit nur der Information, die du wirklich aus dem Formular entgegennehmen willst. Also keine überflüssigen Felder, die du nicht verstehst.

        Dein Formular darf mit <table> strukturiert sein.
        Besser wäre es jedoch, du würdest von den Elementen <ul> <fieldset> <legend> Gebrauch machen.
        Jedes Feld für eine Usereigabe oder Userwahl braucht auch ein <label> Element. Ein <label> Element hat automatisch ein id Attribut des entsprechenden input zur Folge. Dies kann dann für JS zusätzlich nützlich sein.

        Vielleicht willst du hier beginnen. Wir können dann das Resultat deiner Bemühung betrachten und dir weiter assistieren.

        Bitte bediene dich aus dem Fundus der Selfhtml Dokumentation
        (aber bitte nicht blind kopieren, dafür ist es nicht gedacht.)

        mfg Beat

        --
        Woran ich arbeite:
        X-Torah
           <°)))o><                     ><o(((°>o
        1. Moin!

          Hier haben wir eine kommentierte Fassung für derlei Anfragen: http://aktuell.de.selfhtml.org/artikel/cgiperl/form-mail/

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix®

          --
          Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
          1. Hier haben wir eine kommentierte Fassung für derlei Anfragen: http://aktuell.de.selfhtml.org/artikel/cgiperl/form-mail/

            Das Skript von stammberger ist diese Skript.

            Es ist aber leider absolut nicht empfehlenswert, genau genommen ist es das gegenteil davon, ein Beispiel, wie man es auf keinen Fall machen sollte.

            Struppi.