1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Formailer sendet die Mails nicht

Discussion in 'Web-Know-how für die Homepage' started by Basti81, Aug 3, 2007.

Thread Status:
Not open for further replies.
  1. Basti81

    Basti81 Kbyte

    Hallo,

    woran kann es liegen das der Formailer einfach keine Mail sendet. Der Programmablauf ist soweit aber richtig und es kommt kein Fehler. Gibt es etwas was man umbedingt beachten sollte? Server, Rechte, usw...





    Danke
     
  2. kalweit

    kalweit Hüter der Glaskugel

    Keine Ahnung - da solltest du mit Details rausrücken. Ansonsten: ist ein MTA in der php.ini angegeben und funktioniert der?
     
  3. Basti81

    Basti81 Kbyte

    Ich Poste mal den Quelltext, es sind 7 Dateien die alle auf den Server in einen Ordner liegen.

    index.html
    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    
    <title>E-Mail Formular</title>
    
    <style type="text/css">
    body {
    background-color: #ffffff;
    font-family: Verdana, Arial;
    font-size: 11px;
    color: #000000;
    }
    .tb {
    background-color: #e9e9e9;
    }
    
    .ttop {
    background-color: #f9f9f9;
    font-family: Verdana, Arial;
    font-size: 11px;
    color: #000000;
    padding: 3px;
    }
    
    .tc {
    background-color: #ffffff;
    font-family: Verdana, Arial;
    font-size: 11px;
    color: #000000;
    padding: 3px;
    }
    
    /* ############ CSS fuer Formular #################### */
    input.mb {
    font-family: Verdana, Arial;
    font-size: 11px;
    color: #000000;
    background-color:#dbdde1;
    border: 1px solid #000000;
    }
    textarea.mb {
    font-family: Verdana, Arial;
    font-size: 11px;
    color: #000000;
    background-color: #dbdde1;
    border: 1px solid #000000;
    }
    
    select.mb {
    font-family: Verdana, Arial;
    font-size: 11px;
    color: #000000;
    background-color:#dbdde1;
    border: 1px solid #000000;
    }
    
    .los {
    font-size: 11px;
    font-weight: bold;
    color: #000000;
    background: #c0cbd3;
    border: 1px solid #000000;
    }
    form { display: inline; }
    
    </style>
    
    </head>
    <body>
    
    
    <form action="http://inet4you.dyndns.org/form3/mailform.cgi" method="POST">
    <div align="center">
    <table cellspacing="1" cellpadding="0" border="0" class="tb" width="550">
    <tr>
        <td class="ttop" colspan="2"><b>Kontaktformular</b></td>
    </tr>
    <tr>
        <td class="tc" colspan="2">Bitte alle Felder mit * ausf&uuml;llen</td>
    </tr>
    <!-- FORMULAR Feld: Ihr Name START -->
    <tr>
        <td class="tc" width="50%">Ihr Name *</td>
    	<td class="tc" width="50%"><input class="mb" style="width: 200px;" type="text" name="name" size="30"  maxlength="30"></td>
    </tr>
    <!-- FORMULAR Feld: Ihr Name ENDE -->
    <!-- FORMULAR Feld: Ihr Vorname START -->
    <tr>
        <td class="tc" width="50%">Ihr Vorname *</td>
    	<td class="tc" width="50%"><input class="mb" style="width: 200px;" type="text" name="vorname" size="30"  maxlength="30"></td>
    </tr>
    <!-- FORMULAR Feld: Ihr Vorname ENDE -->
    <!-- FORMULAR Feld: Wie haben Sie uns gefunden? START -->
    <tr>
        <td class="tc" width="50%">Wie haben Sie uns gefunden? </td>
    	<td class="tc" width="50%"><select class="mb" name="gefunden" size="1"><option value="Bannerwerbung" >Bannerwerbung</option>
    <option value="Suchmaschine" >Suchmaschine</option>
    <option value="Lokale Anzeige" >Lokale Anzeige</option>
    <option value="Empfelung durch Freunde" >Empfelung durch Freunde</option>
    <option value="Linkliste" >Linkliste</option>
    <option value="sontiges" >sontiges</option>
    </select></td>
    </tr>
    <!-- FORMULAR Feld: Wie haben Sie uns gefunden? ENDE -->
    <!-- FORMULAR Feld: Ihre E-Mail START -->
    <tr>
        <td class="tc" width="50%">Ihre E-Mail *</td>
    	<td class="tc" width="50%"><input class="mb" style="width: 200px;" type="text" name="mail" size="30"  maxlength="50"></td>
    </tr>
    <!-- FORMULAR Feld: Ihre E-Mail ENDE -->
    <!-- FORMULAR Feld: Wichtige Info START -->
    <tr>
        <td class="tc" width="50%">Wichtige Info </td>
    	<td class="tc" width="50%"><input class="mb" style="width: 200px;" type="text" name="memo" size="30"  maxlength="250"></td>
    </tr>
    <!-- FORMULAR Feld: Wichtige Info ENDE -->
    
    <tr>
        <td class="ttop" colspan="2" align="center"><input style="width: 100px;" class="los" type="submit" value="Absenden"></td>
    </tr>
    </table>
    </div>
    </form>
    </body>
    </html>
    
    mailstatus.html
    Code:
    <div align="center">
    <table cellspacing="1" cellpadding="0" border="0" class="tb" width="500">
    <tr>
        <td class="ttop"><b><__$titeltext__></b></td>
    </tr>
    <tr>
        <td class="tc"><__$statustext__></td>
    </tr>
    </table>
    </div>
    footer.html
    Code:
    </body>
    </html>
    mailform.cgi
    Code:
    #!/usr/bin/perl
    
    use CGI::Carp qw(fatalsToBrowser);
    require "mailsetup.pl";
    &formparser;
    
    foreach ("/usr/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/var/qmail/bin/sendmail","/usr/bin/sendmail.restart","/etc/sendmail.cf","/etc/sendmail.cw","/usr/man/man8/sendmail.8","/var/qmail/bin/qmail-inject"){
    if(-e $_ && -X _){
    $mailprogamm = $_;
    last;
    }
    } 
    ###################################################
    # alle Formfelder
    $name = &maildatensaver($FORM{'name'});
    $vorname = &maildatensaver($FORM{'vorname'});
    $gefunden = &maildatensaver($FORM{'gefunden'});
    $mail = &maildatensaver($FORM{'mail'});
    $memo = &maildatensaver($FORM{'memo'});
    
    ###################################################
    
    # Fehlerbehandlung Anfang
    $fehlermeldung = "" ;
    $fehler_gefunden = "" ;
    
    #--------CHECK fuer: Ihr Name-----------------------------
    $errormeldung = "<li>Das Feld \"Ihr Name\" wurde nicht oder nicht mit korrekten Daten ausgefüllt.\n" ;
    if ($name eq '') {
    $fehlermeldung = $fehlermeldung.$errormeldung ;
    $fehler_gefunden = 1 ; }
    
    #-------------------------------------
    #--------CHECK fuer: Ihre E-Mail-----------------------------
    $errormeldung = "<li>Das Feld \"Ihre E-Mail\" muss eine g&uuml;ltige E-Mail Adresse beinhalten.\n";
    if ($mail !~ /^([a-zA-Z0-9][a-zA-Z_0-9-\.]*)(\@)([a-zA-Z0-9][a-zA-Z_0-9-\.]*[a-zA-Z0-9])(\.)([a-zA-Z0-9]*)$/) {
    $fehlermeldung = $fehlermeldung.$errormeldung ;
    $fehler_gefunden = 1 ; }
    #-------------------------------------
    
    
    if ($fehler_gefunden) {
    &fehlerausgabe;
    exit;
    }
    # Fehlerbehandlung Ende
    ###################################################
    &floodcheck;
    &datumsroutine;
    &mailsenden;
    &bestaetigung;
    sub mailsenden {
    
    # Mail senden
    my $mailbodykontakt = <<MBT;
    Neue Mail von $vorname $Nachname,
    
    Mail Adresse ist: $mail
    gefunden hat er uns über: $gefunden
    
    Folgedes schreibt $vorname$Nachname:
    $memo
    
    ENDE
    MBT
    
    if (!$email) { 
    $email = $empfaengermail;
    }
    
    if (!$betreff) { 
    $betreff = "Mail von Ihrem Feedbackformular";
    }
    
    open (MAIL, "|$mailprogamm -t") || die $!;
    print MAIL "To: $empfaengermail ($empfaenger)\n";
    print MAIL "From: $email \n";
    print MAIL "Subject: $betreff\n\n";
    print MAIL $mailbodykontakt;
    print MAIL "\n\n";
    print MAIL "Gesendet am: $datumlang\n";
    close(MAIL);
    }
    
    
    ###################################################
    sub bestaetigung {
    print "Content-type: text/html\n\n";
    
    $meta = qq~<meta http-equiv="refresh" content="$forwardtime; URL=$forwardurl">~;
    $titeltext = "Nachricht erfolgreich versendet";
    $statustext = qq~<b>Vielen Dank f&uuml;r Ihre Nachricht.</b><br><br>
    Sie werden in $forwardtime Sekunden zur Hauptseite weitergeleitet.
    Sollte dies nicht funktionieren klicken Sie bitte untenstehen Link.<br><br>
    
    <div align="center"><a href="$forwardurl">Zurück zur Hauptseite</a></div>
    <br><br>
    ~;
    print &tparser("header.html");
    print &tparser("mailstatus.html");
    print &tparser("footer.html");
    exit;
    }
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    # Fehlerausgabe
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    sub fehlerausgabe {
    print "Content-type: text/html\n\n";
    
    $meta = '';
    $titeltext = "Fehler festgestellt!";
    $statustext = qq~<b>Beim ausfüllen haben Sie folgendes vergessen:</b>
    <ol>
    $fehlermeldung
    </ol><br><br>
    
    <div align="center">Bitte gehen Sie « <a href="javascript:history.go(-1)">zurück</a></div>
    ~;
    print &tparser("header.html");
    print &tparser("mailstatus.html");
    print &tparser("footer.html");
    exit;
    }
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    # Formdatenparser
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    sub formparser {
    read(STDIN, $input, $ENV{'CONTENT_LENGTH'});
    @pairs = split(/&/, $input);
    foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $name =~ tr/+/ /;
    $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$name} = $value;
    }
    }
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    # Templateroutine
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    sub tparser {
    my $templatedatei = shift;
    my $OUTPUT;
    local($/);
    
    open (FILE, "<$templatedatei") or die "Kann Template $templatedatei nicht oeffnen $!\n";
    $OUTPUT = <FILE>;
    close(FILE);
    # Skalarwerte ersetzen
    $OUTPUT =~ s/<__\$([\w\-]+)__>/${$1}/g;
    # Hashwerte ersetzen
    $OUTPUT =~ s/<__\%([\w\-]+)\{([\w\-]+)\}__>/${$1}{$2}/g;
    # Arraywerte ersetzen
    $OUTPUT =~ s/<__\$([\w\-]+)\[([\w\-]+)\]__>/${$1}[$2]/g;
    # Werte ersetzen in der Form $lang{user}
    $OUTPUT =~ s/<__\$([\w\-]+)\{([\w\-]+)\}__>/${$1}{$2}/g;
    # Werte ersetzen in der Form $input{'action'} oder $lang{'hallo du'}
    $OUTPUT =~ s/<__\$([\w\-]+)\{'([\w\- ]+)\'}__>/${$1}{$2}/g;
    return $OUTPUT;
    }
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    # Datumsroutine
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    sub datumsroutine {
    
    @tagekurz = ('So','Mo','Di','Mi','Do','Fr','Sa');
    @monatekurz = ('Jan.','Feb.','März','Apr.','Mai.','Jun.','Jul.','Aug.','Sept.','Okt.','Nov.','Dez.');
    @tage = ('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');
    @monate = ('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
    ($sec, $min, $stunde, $mtag, $mon, $jahr, $tag, $nr_tag, $isdst) = localtime(time);
    $monat = $mon+1;
    if($monat < 10) { $monat = "0$monat"; }
    if($stunde < 10) { $stunde = "0$stunde"; }
    if ($min < 10) { $min = "0$min"; }
    if ($sec < 10) { $sec = "0$sec"; }
    $jahr = 1900 + $jahr;
    
    # Ausgabe z.B. Sonntag, 14. Juli , 2002 um 17:39:43 Uhr 
    $datumlang = " $tage[$tag], $mtag. $monate[$mon]  $jahr um $stunde:$min:$sec Uhr";
    }
    # - - - - - - - - - - - - - - - - - - - - - - - - - - #
    # Floodsperre
    # - - - - - - - - - - - - - - - - - - - - - - - - - - #
    sub floodcheck {
    $wartezeit = "1.0";
    $sperrlistenlaenge = 15;
    my $IP_Nummer = $ENV{'REMOTE_ADDR'};
    my $aktionszeit = time();
    
    open(ZEITLIMIT, "floodsperre.dat");
    @letzte_eintraege = <ZEITLIMIT>;
    close(ZEITLIMIT);
    foreach (@letzte_eintraege) {
    if (/^$IP_Nummer/){
    ($junk,$letzte_aktionszeit) = split(/\|!!\|/,$_);
    chomp($letzte_aktionszeit);
    last;
    }
    } # ende foreach
    $wartezeit *= $noflood; # zeit in sek bis neu gepostet werden darf
    $floodfehler = 0;
    if ( int(($aktionszeit - $letzte_aktionszeit) < $wartezeit)){
    
    $floodfehler = 1;
    
    # Fehlerpruefung
    $fehlermeldung = "" ;
    $fehler_gefunden = "" ;
    # -----------------------------------------------------------------------
    $errormeldung = "<li>Sie müssen $wartezeit Sekunden warten bis Sie wieder eine E-Mail absenden k&ouml;nnen.\n" ;
    if ($floodfehler) {
    $fehlermeldung = $fehlermeldung.$errormeldung ;
    $fehler_gefunden = 1 ; }
    # -----------------------------------------------------------------------
    if ($fehler_gefunden) {
    &fehlerausgabe;}
    exit;
    }
    else {
    if (unshift(@letzte_eintraege, "$IP_Nummer|!!|$aktionszeit\n") > $sperrlistenlaenge){
    $#letzte_eintraege = $sperrlistenlaenge;
    }
    
    open(ZEITLIMIT, ">floodsperre.dat");
    print ZEITLIMIT @letzte_eintraege;
    close(ZEITLIMIT);
    }
    return 1;
    }
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    # Maildaten vorbereiten
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    sub maildatensaver {
    $_[0] =~ s/^\s+//;
    $_[0] =~ s/\s+$//;
    $_[0] =~ s/`//g;
    $_[0] =~ s/\r//g;
    $_[0] =~ s/\|//g;
    $_[0] =~ s/\n/\n/ig;
    return($_[0]);
    }
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    
    
    
    header.html
    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    <__$meta__>
    <title>E-Mail Formular</title>
    
    <style type="text/css">
    body {
    background-color: #ffffff;
    font-family: Verdana, Arial;
    font-size: 11px;
    color: #000000;
    }
    .tb {
    background-color: #e9e9e9;
    }
    
    .ttop {
    background-color: #f9f9f9;
    font-family: Verdana, Arial;
    font-size: 11px;
    color: #000000;
    padding: 3px;
    }
    
    .tc {
    background-color: #ffffff;
    font-family: Verdana, Arial;
    font-size: 11px;
    color: #000000;
    padding: 3px;
    }
    </style>
    
    </head>
    <body>
    
    mailsetup.pl
    Code:
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    # Konfigurationsdatei
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    # Formular URL
    $formurl = 'http://domain.de/formular
    # Empfaenger Name
    $empfaenger = 'Name';
    # Empfaenger Mail
    $empfaengermail = 'meine@mail.de';
    # Weiterleitungs URL
    $forwardurl = 'http://domain.de';
    # Weiterleitungs zeit
    $forwardtime = "5";
    # Floodsperre
    $noflood = "10";
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
    1;
    
    flootsperre.dat
    Code:
    
    
     
  4. kalweit

    kalweit Hüter der Glaskugel

    ...du willst doch nicht wirklich, dass ich mir das alles anschaue. Glaskugel: das Perlscript läuft auf einer Linuxkiste, damit dürfte das mit dem MTA geklärt sein. Das Problem fängst du hier:

    Nochmal Glaskugel: Du versuchst eine Mail über eine dynamische IP Adresse abzusetzen. Das dürfte bei den meisten Mailservern auf Ablehnung stoßen, da diese keinen gültigen MX Eintrag hat bzw. der Mailserver auf den notwendigen Ports nicht erreichbar ist. Viele Provider sperren dyn. IP Adressen grundsätzlich. Einziger Ausweg: dein Formmailer darf die Mail nicht lokal verschicken, sondern muss sie über einen externen (gültigen) SMTP-Server ausliefern.
     
  5. kalweit

    kalweit Hüter der Glaskugel

    Nachtrag: Bist du dir sicher, was du da tust?

     
  6. Basti81

    Basti81 Kbyte

    ja der ist eigentlich nur zum testen da der Server aber habe ich grad geändert.

    Ich hatte es aber auch schon auf einen anderen Server laufen also eine normale 1&1 Server.
     
Thread Status:
Not open for further replies.

Share This Page