Vielen Dank für die vielen hilfreichen Antworten. Bis ich nun ausreichend PHP und Perl für meinen ganz eigenen Formmailer kann, habe ich mir dank Euch allen folgendes Script zusammengebastelt (ein Mix aus dem Script von SelfHTML und dem Schutzmechanismus eines DrWeb.de Tutorials)
Für alle Interessierten hier das Script, was bei meinen Tests funktionierte. Optisch muss man es natürlich noch anpassen, aber es läuft und sollte Spam abfangen können (zum Preis von etwas Tipparbeit vom Besucher und der Barrierenfreiheit...).
Man muß nur die Email-Adresse sowie den Link zur Danke-Seite (URL) fast am Anfang des Scripts eintragen.
<?php
Von Rene Schmidt (rene@reneschmidt.de) fuer DrWeb.de
class Digit {
var $bits = array(1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384);
var $matrix = array();
var $bitmasks = array(31599, 18740, 29607, 31143, 18921, 31183, 31695, 18855, 31727, 31215);
function digit( $dig ) {
$this->matrix[] = array(0, 0, 0); // 2^0, 2^1, 2^2 ... usw.
$this->matrix[] = array(0, 0, 0);
$this->matrix[] = array(0, 0, 0);
$this->matrix[] = array(0, 0, 0);
$this->matrix[] = array(0, 0, 0); // ..., ..., 2^14
((int)$dig >= 0 && (int)$dig <= 9) && $this->setMatrix( $this->bitmasks[(int)$dig] );
}
function setMatrix( $bitmask ) {
$bitsset = array();
for ($i=0; $i<count($this->bits); ++$i)
(($bitmask & $this->bits[$i]) != 0) && $bitsset[] = $this->bits[$i];
foreach($this->matrix AS $row=>$col)
foreach($col AS $cellnr => $bit)
in_array( pow(2,($row*3+$cellnr)), $bitsset) && $this->matrix[$row][$cellnr] = 1;
}
}
class Number {
var $num = 0;
var $digits = array();
function number( $num ) {
$this->num = (int)$num;
$r = "{$this->num}";
for( $i=0; $i<strlen($r); $i++ )
$this->digits[] = new Digit((int)$r[$i]);
}
function getNum() { return $this->num; }
function printNumber() {
for($row=0; $row<count($this->digits[0]->matrix); $row++) {
foreach( $this->digits AS $digit ) {
foreach($digit->matrix[$row] AS $cell)
if($cell === 1) print("<span class="s"> </span>"); else print("<span class="w"> </span>");
print("<span class="w"> </span>");
}
print("<br>");
}
}
}
Konfiguration
Bitte passen Sie die folgenden Werte an, bevor Sie das Script benutzen!
An welche Adresse sollen die Mails gesendet werden?
$strEmpfaenger = 'abc@meinedomain.de';
Welche Adresse soll als Absender angegeben werden?
(Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben)
$strFrom = '"Formmailer" IhrAndererName@provider.xy';
Welchen Betreff sollen die Mails erhalten?
$strSubject = 'Feedback';
Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?
Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!
$strReturnhtml = 'http://www.meinedomain/danke.shtml';
Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen?
$strDelimiter = ":\t";
Ende Konfiguration
if($_POST)
{
$strMailtext = "";
while(list($strName,$value) = each($_POST))
{
if(is_array($value))
{
foreach($value as $value_array)
{
$strMailtext .= $strName.$strDelimiter.$value_array."\n";
}
}
else
{
$strMailtext .= $strName.$strDelimiter.$value."\n";
}
}
if(get_magic_quotes_gpc())
{
$strMailtext = stripslashes($strMailtext);
}
if($zahl != $pass)
{
die("Falsche Kontrollzahl. Die Mail konnte nicht versendet werden.");
}
mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
or die("Die Mail konnte nicht versendet werden.");
header("Location: $strReturnhtml");
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
<title>Einfacher PHP-Formmailer</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style>
.s { color: black; background-color: black; }
.w { color: white; background-color: white; }
</style>
</head>
<body>
<h1>Beispielformular</h1>
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
<!-- Hier die eigentlichen Formularfelder eintragen. Die folgenden sind Beispielangaben. -->
<dl>
<dt>Ihr Name:</dt>
<dd><input type="text" name="Versender" /></dd>
<dt>Ihre E-Mail:</dt>
<dd><input type="text" name="E-Mail" /></dd>
<dt>Sie können:</dt>
<dd><input type="checkbox" name="kannwas[]" value="HTML" />HTML <input type="checkbox" name="kannwas[]" value="PHP" />PHP</dd>
<dt>Sie sind:</dt>
<dd><input type="radio" name="sexus" value="M" />Mann <input type="radio" name="sexus" value="Frau" />Frau</dd>
<dt>Sie mögen:</dt>
<dd><select name="Browser"><option value="Opera">Opera</option><option value="Mozilla">Mozilla</option></select></dd>
<dt>Bemerkungen:</dt>
<dd><textarea name="Bemerkungen" rows="3" cols="20">Bemerkungen</textarea></dd>
</dl>
<!-- Ende der Beispielangaben -->
<?php
$n = new Number( rand(1000,9999) );
$n->printNumber();
printf( "<h2>Dargestellt wird die Zahl %d</h2>", $n->getNum() );
?>
Bitte geben Sie die Zahl ein:
<input type="text" name="zahl" />
<input type="hidden" name="pass" value="<? printf( "%d", $n->getNum() ); ?>" />
<p>
<input type="submit" value="Senden" />
<input type="reset" value="Zurücksetzen" />
</p>
</form>
</body>
</html>