Ich habe mal zum schnellen Test ein einfaches Skript zusammengebastelt. Ist sicher selbsterklärend.
Eventuell muss man das passende PEAR Paket installieren. Viel Spaß damit.
PHP-Code:
// PEAR HTTP Request einbinden. Vielen Dank an die Maintainer Richard Heyes und Alexey Borzov
require 'HTTP/Request.php';
// Assoc Array mit den Formularfeldern. Key = Feldname, Value = Eintrag
$send = array(
'Name'=> 'Max',
'Vorname'=> 'Mustermann',
'Email'=> "example@example.com%0DBcc: Foo@example.com", // Dieses Feld wollen wir injecten
'Nachricht'=> 'Dies ist ein Test ...',
'Submit' => 'Submit'
);
// Falls das Formular in einem htaccess geschützten Bereich liegt, hier Benutzer und Kennwort eintragen
$user = false;
$pass = false;
// Erst das HTTP_REQUEST Objekt erzeugen ...
$r =& new HTTP_Request('http://example.com/meinFormmailer.php');
// ... POST als MEhtode bestimmen ...
$r->setMethod(HTTP_REQUEST_METHOD_POST);
// ... eventuell per HTTP authentifizieren ...
if($user && $pass) $r->setBasicAuth($user, $pass);
// ... alle Formularfelder an das Objekt übergeben ...
foreach($send as $k=>$v){
$r->addPostData($k, $v);
}
// ... und "den Abschicken Button drücken".
$rs = $r->sendRequest();
if (PEAR::isError($rs)===true){
echo $rs->getMessage(); // falls ein Fehler auftrat
}else{
echo $r->getResponseBody(); // Hier wird der body der aufgerufenen Seite ausgegeben. Hat es geklappt?
}
Und hier das passende HTML Formular:
Code:
<form method="post" action="">
<label for="Name">Name</label><input type="text" name="Name" id="Name" /><br />
<label for="Vorname">Vorname</label><input type="text" name="Vorname" id="Vorname" /><br />
<label for="Email">Email</label><input type="text" name="Email" id="Email" /><br />
<label for="Nachricht">Nachricht</label><input type="text" name="Nachricht" id="Nachricht" /><br />
<input type="submit" value="Submit" />
</form>
<?php
if($_POST){
mail('me@example.com', 'Email von ' . $_POST['Email'], $_POST['Nachricht']);
}
?>
\r und \n reicht scheinbar nicht. Ich war immernoch in der Lage einen String zu injecten. Deshalb prüfe ich jetzt i.d.R case-insensitive auf folgenden Literale:
\r
\n
%0D
%0A
Content-Type:
MIME-Version:
Subject:
bcc:
cc:
Content-Transfer-Encoding: